のOpenJPA 1.2.2は、WebSphere 7(のJava EE 5)OpenJPAの - 不可解な例外が名前付きネイティブクエリ
を作成し、私はPOJOにテーブルをマップしようとしているnamed-を使用して(未実体!) orm.xmlで定義されたネイティブクエリ:
<named-native-query name="myNativeQuery" result-class="foo.bar.PojoBean">
<query>
SELECT col_one AS colOne, col_two AS colTwo, col_three AS colThree
FROM myTable WHERE id = 42
</query>
</named-native-query>
PojoBeanがStringゲッター/セッターと空の引数のコンストラクタでfinalクラスである:私は、クエリを作成すると
public final class PojoBean implements java.io.Serializable {
public PojoBean() {
}
public String getColOne() { ... }
public void setColOne(String colOne) { ... }
...
}
:
EntityManager myEntityManager = ...
myEntityManager.createNamedQuery("myNativeQuery");
私は(読みやすくするためにフォーマット済み)は例外だ:それは意味しない何
<openjpa-1.2.2-r422266:898935 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException:
Result type "class foo.bar.PojoBean" does not have any public fields or setter methods for the projection or aggregate result element "null",
nor does it have a generic put(Object,Object) method that can be used,
nor does it have a public constructor that takes the types null.
を?
詳細情報:
- PojoBeanの実装を変更することはできません、最終的なクラスとしても拡張することはできません。
- EntityManager.createNativeQuery(...)を使用してjavaからクエリを実行すると機能しますが、オプションではありません。
あなたが展開されたJARのクラスPojoBeanが実際に&ゲッター公共セッターを持っていることを確認することがあり、
あなたは不安定なセッターを持っていますか? setValue(String val)setVatue(Integer val)のようなものです。あなたの問い合わせがnullを返す場合は、それがabigiuosかもしれません。setterは呼び出されるべきです。 –
あいまいなセッターはありません。 orm.xmlを使用する代わりにJava(EntityManager.createNativeQuery(...))でクエリをコーディングすると動作します。 – Giambo
ジグルについては、あなたのPOJOを最終的なものにしてみることができますか?また、ormスニペットは、問合せがネイティブ問合せであることを示します。なぜ、createNativeQuery(...)をコールしていないのですか。 – Rick