2011-01-14 64 views
0

有沒有什麼辦法讓Hibernate取代實體屬性的原生SQL查詢(由Session.createSQLQuery()創建)的名字呢?用Hibernate的屬性映射在普通的SQL查詢

我想建立一個查詢,其中任意列取不導致Hibernate的實體,類似於這樣一個

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

與「attR1位」,「attR2位」,......是的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

純HQL是沒有選擇,因爲我想包括未映射Hibernate的表。 AFAIK HQL不支持包含Hibernate未知的未映射表。如果我在這裏弄錯了,請糾正我。 – void 2011-01-17 10:04:16

0

如果您使用自定義NamingStrategy(或標準之一,對於這個問題),你可以使用NamingStrategy類來生成屬性名的列名。

NamingStrategy namingStrategy = new DefaultNamingStrategy(); 
String yourPropertyName="fooBar"; 
String columnName = namingStrategy.propertyToColumnName(yourPropertyName);