JPA永続性プロバイダをEclipseLink 2.3からHibernate 3.6.5.Finalに切り替える作業を進めています。問題はネイティブクエリーにあります。注:これはEclipseLinkの問題ではありませんでした。私はスカラー値、String
を取得しようとしていますが、私はエンティティが宣言されていません。ここでは、コードは次のようになります。getSingleResultは、ハイバネートのネイティブスカラークエリでプロキシを返します
Query q = em.createNativeQuery("select description from foo where foo_id = ?");
q.setParameter(1, fooId);
String description = (String)q.getSingleResult();
Hibernateで返されたオブジェクトが、実際にはプロキシオブジェクトであるので、私はClassCastException
を取得します。私はそれがどのタイプなのかわかりませんが、配列ではないことを知っています(object.getClass().isArray()
はfalseです)、リストではないことがわかります(object instanceof List
はfalse
です)。
私には何が欠けていますか?
'q.getSingleResult()。getClass()。getInterfaces()'はどのインタフェースを返しますか? –
ああ...それは私が必要なものでした。型java.sql.Clob、org.hibernate.engine.jdbc.WrappedClob、およびjava.io.Serializableです。あなたがそれを答えるなら、私はそれを受け入れるでしょう。私は列がクローブであることを認識していないし、EclipseLinkが私のためにStringへの変換を行っていたことに驚いています。 – Ryan
私は助けることができてうれしい! –