Google App Engineプロジェクトの一部としてDataNucleusを使用していますが、永続化の列で少し問題が発生しています。
@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;
わからない場合は、2つの命名規則があるため(1つはJavaで、もう1つは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
したがって、これらの注釈のいずれかが尊重された場合に名前が付けられたフィールドがありますが、明らかにそうではありません。
だから私の質問は:私がクエリで使用するトークンをフィールドの名前から切り離す方法はありますか?クエリを手動で編集しなくても、フィールドの名前を変更できる機能を探しています。
注:手作業で恐ろしい量のXMLを記述するよりも、JavaクラスでSQL命名規則を使用する方が早いので、これはアノテーションを使用して行う必要があります。