1
我试图将我的Sql查询转换为HQL,因为它们更容易在视图和控制器中进行管理。从SQL到HQL的Hibernate - 无限循环?
所以我有2个实体,Luce和Illuminazione。 ILLUMINAZIONE与卢斯一个多对一的注释,这样
@ManyToOne
@JoinColumn(name = "id_luce")
public Luce getLuce() {
return this.luce;
}
public void setLuce(Luce luce) {
this.luce = luce;
}
现在,我有ILLUMINAZIONE元素的列表,我需要用最大的日期,卢斯元素分组抢的。换句话说,我只需要从Illuminazione实体获取每个Luce对象的最后状态。
的SQL查询,它的工作原理,是
String query = "select i.id_evento, i.id_luce, i.last_date_time, l.numero_luce, l.nome_luce, ill.MaxDate, i.isLit "
+ "from illuminazione i inner join luci l on i.id_luce= l.id_luce "
+ "inner join (SELECT `id_luce` as numeroLuce2, max(date_time) as MaxDate from illuminazione i2 group by `i2`.`id_luce`) ill "
+ "on i.id_luce = ill.`numeroLuce2` and i.`date_time` = ill.MaxDate order by i.`id_luce` asc";
SQLQuery q = getSession().createSQLQuery(query);
q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
我这个HQL查询试过,但我在无限循环结束的联合国......所以我觉得有一些奇怪..
String query = "select i from Illuminazione i where i.dateTime = (select max(ii.dateTime) from Illuminazione ii where i.luce = "
+ "ii.luce)";
有没有办法达到我所需要的?
编辑 其实它并没有进入无限循环,但6-7分钟就结束后,结果是正确的,但它是如何的不可能性这个长的时间?它在表中只有2000个值...
用'addEntity'我可以用Illuminazione.class命名?这个问题真的是在视图中使用列名,而不是Java对象的属性......顺便说一句,为了知识的缘故,HQL查询花费很长时间来完成相同的SQL查询可能性如何? – besmart
addEntity将从i。*字段执行自动映射。该查询将返回Illuminazione对象。如果你不需要这个,你可以使用addScalar来获取所需的属性。较少的抽象通常是更多的表现。 Hiberate执行HQL编译并为每一行执行映射。 – Orden