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