2011-01-14 4 views
0

HibernateにネイティブSQLクエリ(Session.createSQLQuery()で作成)のエンティティ属性名を置き換える方法はありますか?私は「ATTR1」、「ATTR2」と、この1プレーンSQLクエリでHibernate属性マッピングを利用する

SELECT t1.attr1, t2.attr2, t3.attr3 WHERE t1.attr1 = 'foo' AND t2.attr2 = ... 

に似Hibernateのエンティティ、...というJavaの生じない任意の列がフェッチされ、クエリを構築したいと思います

Hibernateによって自動的にマッピングされるべきプロパティ名。

私はSQLQuery.addEntity()を見ましたが、それは結果セットではなく、クエリ上で動作するようです。

クエリで属性名を置き換える方法はありますか、エンティティの注釈を自分で確認することなく、Hibernateによって生成されたマッピングに簡単にアクセスできるツールはありますか?

ありがとうございます!

答えて

0

SQLクエリを使用する必要があるのは、完全なエンティティではなく別の列をフェッチする場合だけです。このようなクエリはHQLでも表現できます。列の値のタプルはObject[]として返されます。

Object[] tuple = s.createQuery("SELECT t.a, t.b, t.c FROM SomeEntity t WHERE ...").uniqueResult(); 
+0

Hibernateでマッピングされていないテーブルを含めるので、プレーンHQLはオプションではありません。 AFAIK HQLは、Hibernateに知られていないマッピングされていないテーブルの追加をサポートしていません。私がここで間違っていると私を修正してください。 – void

0

カスタムNamingStrategy(またはそのことについては標準的なものを、)を使用する場合は、プロパティ名から列名を生成するNamingStrategyをクラスを使用することができます。

NamingStrategy namingStrategy = new DefaultNamingStrategy(); 
String yourPropertyName="fooBar"; 
String columnName = namingStrategy.propertyToColumnName(yourPropertyName); 
関連する問題