2010-11-19 28 views
3

私の古い休止のみのコードでは、私たちが休止状態のEntityManager(JPA実装)を使用する新しいプロジェクトではJPAには、Hibernate SQLQuery.addScalar()と同等の機能がありますか?

session.createSQLQuery("SELECT * FROM CATS") 
.addScalar("ID", Hibernate.LONG) 
.addScalar("NAME", Hibernate.STRING) 
.addScalar("BIRTHDATE", Hibernate.DATE) 

のようなものを使用しています。

addScalar()の呼び出しと同等の機能はありますか?以前に行ったように返される列の型を指定する必要はありますか?

たとえば、私がaddScalarを使用しないと、SQLクエリの結果がキャッシュされますか?

答えて

1

JPAで全く同じものを探していて、何も見つかりませんでした。

うわー、6ヶ月ではなく答える:)

を、それが助けかどうか分からないのですが、私は、回避策を見つけた:

ダニは、あなたがのSQLQueryに直接キャストすることはできませんということです、 HibernateQueryにキャストしてからgetHibernateQueryを呼び出し、その結果をSQLQueryにキャストする必要があります。

一部(スカラ)コードの

そして今:

val sql = "select distinct story as story from ..."; 
val q: Query = getEntityManager().createNativeQuery(sql); 
//hello nasty hack 
q.asInstanceOf[HibernateQuery].getHibernateQuery().asInstanceOf[SQLQuery].addScalar("story", StandardBasicTypes.LONG); 
//next, caching 
q.setHint("org.hibernate.cacheable", true); 
q.setHint("org.hibernate.cacheRegion", "query.getTopLinks"); 

醜いが、それは仕事をしていません:)

+0

、結果が得られたクラスの型を指定するパラメータを取り、問題

に直面している場合には、それに答えます非休止状態のjpaプロバイダでこれを行いますか? – vikingsteve

2

ポストHibernate native query - char(3) column

が表示されます。同様に、短いソリューションを提供しているようです私のために働く:

Query q2 = em.createNativeQuery("select sc_cur_code, sc_amount from sector_costs"); 
q2.unwrap(SQLQuery.class).addScalar("sc_cur_code", StringType.INSTANCE); 
+0

非休止状態のjpaプロバイダーでこれをどうやって行うのですか? – vikingsteve

1

私はかなり古い質問、jを知っているUSTは、他の誰かがあなたのケースでは、あなたがそれを変更できるようにcreateNativeQueryがどのように任意のアイデア

val sql = "select distinct story as story from ..."; 
Query = getEntityManager().createNativeQuery(sql,Story.class); 
+0

これはうまくいくかもしれませんが、プリミティブ/スカラー(たとえば、Short.classなど)では動作しないようです。 (未知のエンティティ:java.lang.Short) – JRun

+0

プリミティブをDTOクラスに配置します。 – wildloop

関連する問題