Я работаю с DataNucleus как часть проекта Google App Engine, и у меня возникают проблемы с постоянством столбцов.DataNucleus Enhancer, JDO и указывающие имена столбцов
@PrimaryKey(column = "user_id")
@Column(name = "user_id")
@Persistent(name = "user_id", column = "user_id", valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key m_id;
@Column(name = "user_name")
@Persistent(name = "user_name", column = "user_name")
private String m_userName;
Если вы не можете сказать, что я пытаюсь назвать колонки что-то другое, чем имя переменной, потому что у меня есть два соглашения о присвоении имен (один работает лучше в Java, один работает лучше в SQL). Во всяком случае, я попробовал все варианты этих маркеров аннотаций, но энхансер DataNucleus отказывается выполнять какие-либо из них, поэтому, когда я выполнить запрос так:
Query q = pm.newQuery(User.class,
"user_name == _username");
Я всегда получаю сообщение об ошибке, как это:
org.datanucleus.store.appengine.FatalNucleusUserException: Неожиданный тип выражения при анализе запроса. Вы уверены, что на вашем объекте существует поле с именем user_name?
Конечно, при выполнении запроса, как это:
Query q = pm.newQuery(User.class,
"m_userName == _username");
... все просто отлично работает. Таким образом, было бы поле с именем user_name
, если бы какая-либо из этих аннотаций была удостоена, но они явно нет.
SO Мой вопрос: есть ли способ отделить токены, которые я использую в запросе, от имени поля? Я ищу возможность изменять имена полей без необходимости вручную редактировать запросы.
ПРИМЕЧАНИЕ: Я бы скорее использовал свои соглашения об именах SQL в классах Java, чем писать отвратительные количества XML вручную, так что это нужно делать с помощью аннотаций.
Вот эта страница для Querydsl: http://source.mysema.com/display/querydsl/Querydsl –