2010-11-15 65 views
1

將一些sql添加到Criteria對象的選擇部分的最佳方式是什麼?休眠標準 - 新手問題II

(我想隨着距離的增加SELECT myFunction的,這樣我可以在以後通過遠程命令)

乾杯, 羅布

回答

1
List cats = session.createCriteria(Cat.class) 
    .createAlias("kittens", "kit") 
    .add(Restrictions.like("kit.name", "Iz%")) 
    .list(); 

不過,我勸你最好不要混合使用SQL Hibernate的標準API代碼:選擇使用SQL(或更好的HQL)代碼或條件API。

+0

+1的意見 – Mark 2010-11-15 17:17:07

+0

謝謝你的建議,今天我嘗試過了,但(除非我做錯了這很可能是!)當您使用。 createAlias(「kittens」,「kit」)hbm.xml文件必須引用「小貓」,否則會引發錯誤。我想要做的是相當於createAlias(「SQRT(POW(69.1 *({alias} .latitude - 」+ point [1]),2)+ POW(69.1 *(「+ point [0]」 - {別名}。經度)* COS({別名} .latitude 57.3),2))「,」距離「)以便我可以稍後做.orderBy(」distance「) – Rob 2010-11-18 13:37:27

1

從休眠documentation

List results = session.createCriteria(Cat.class) 
.setProjection(Projections.projectionList() 
    .add(Projections.rowCount(), "catCountByColor") 
    .add(Projections.avg("weight"), "avgWeight") 
    .add(Projections.max("weight"), "maxWeight") 
    .add(Projections.groupProperty("color"), "color") 
) 
.addOrder(Order.desc("catCountByColor")) 
.addOrder(Order.desc("avgWeight")) 
.list(); 
+0

我目前正在努力解決如何實施這是一個解決方案,目前無濟於事,我一般發現的困難是將sql函數以一種有意義的方式進入休眠狀態。我嘗試使用的精確函數是: - SQRT(POW(69.1 *({別名} .latitude - 51.3814282),2)+ POW(69.1 *(-2.3574537 - {別名} .longitude)* COS({別名} .latitude/57.3),2)) 其中{別名}因此: - criteria.createCriteria(「location.address」); – Rob 2010-11-18 16:06:04