【发布时间】:2020-02-02 13:05:04
【问题描述】:
在我们的(古老的)项目中,我们在 Hibernate 版本 3.5.6-Final 上使用了大量带有 HQL 的选择查询。因为 Hibernate 将执行自动提交,因为它不知道它们是选择查询,所以我正在将所有 HQL 选择查询重写为 Hibernate Criteria 查询,因此当我们不这样做时它不会执行中间提交还不想要。在大多数情况下,这非常简单,但我目前正在查看这样的查询,但我不确定如何转换它:
Query query = session.createQuery("select municapilityStreet"
+ " from MunicapilityStreet munStreet, Street street"
+ " where munStreet.id = street.MunicapilityStreet.id"
+ " and street.id = :streetId");
query.setParameter(":streetId", streetId);
MunicapilityStreet result = (MunicapilityStreet) query.uniqueResult();
return result;
这是我迄今为止在改造它的过程中所拥有的:
Criteria criteria = session.createCriteria(MunicapilityStreet.class);
// No idea what to set here to only get the "municapilityStreet" as result
criteria.setProjection(??);
// I'm not sure if this is correct. With a criteria on a single table it would have been simply "Id".
// Both tables have the column-name Id, and I'm not sure how to differentiate between them.
criteria.add(Restrictions.eq("Street.Id", streetId));
MunicapilityStreet result = (MunicapilityStreet) criteria.uniqueResult();
return result;
也许我应该为每个问题创建一个不同的问题,但是将上述 HQL 查询转换为 Criteria 有三点我不知道该怎么做:
- 如何对多个表进行选择(
from MunicapilityStreet munStreet, Street street部分)? - 如何进行投影以仅返回两者中的一个表(
select municapilityStreet部分)? - 如何对一个表的列名设置相等限制,即使两个表具有相同的列名(
and street.id = :streetId部分)?
【问题讨论】:
标签: java hibernate select hql hibernate-criteria