2010-11-15 63 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