Я работаю с DataNucleus в рамках проекта Google App Engine, и у меня возникают проблемы с сохранением столбцов.
@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
, если бы какая-либо из этих аннотаций учитывалась, но это явно не так.
ТАК мой вопрос: есть ли способ отделить токены, которые я использую в запросе, от имени поля? Я ищу возможность изменить имена полей без необходимости редактировать запросы вручную.
ПРИМЕЧАНИЕ. Я бы предпочел просто использовать свои соглашения об именах SQL в классах Java, чем писать ужасные объемы XML вручную, поэтому это нужно делать с аннотациями.