繁体   English   中英

Hibernate Criteria左连接两个表

[英]Hibernate Criteria Left Joining Two Tables

我有两个实体,比如商业和区域。

相关属性:
业务 - 区域,区域2,代码
面积 - areaId,areaName

区域和区域2的业务地图到区域中的ID

我正在尝试编写一个Hibernate标准,该标准仅返回所有业务领域。

SQL看起来像:FROM area a LEFT OUTER JOIN business b on a.areaId = b.area或a.areaId = b.area2 WHERE b.code!= null GROUP BY a.areaName

这就是我所拥有的:

DetachedCriteria criteria = DetachedCriteria.forClass(Business.class)
.setProjection(Property.forName("area"))
.setProjection(Property.forName("area2"))
.add(Restrictions.ne("code", null));

Criteria criteriaArea = fullTextSession.createCriteria(Area.class)
.createAlias("areaId", "areaId", CriteriaSpecification.LEFT_JOIN)
.add(Property.forName("areaId").in(criteria));

但这不起作用,我得到一个“不是关联:areaId”查询异常。

任何想法为什么会这样? 谢谢。

createAlias()使用提供的属性连接另一个实体。 Hibernate使用提供的属性的映射来计算要连接的表。 但是areaId未映射为对Business实体的@ManyToOne@ManyToMany引用。 所以Hibernate不了解你想使用Area.areaId加入哪个表。

您的条件将转换为SQL,如:

select a.* from Area a
left join <here should be table referenced by areaId> b on a.areaId = b.id
where a.areaId in (
  select area, area2 from Business where code <> null
)

您可以重写查询而不使用未使用的连接:

DetachedCriteria criteria1 = DetachedCriteria.forClass(Business.class)
.setProjection(Property.forName("area"));

DetachedCriteria criteria2 = DetachedCriteria.forClass(Business.class)
.setProjection(Property.forName("area2"));

Criteria criteriaArea = fullTextSession.createCriteria(Area.class)
.add(Restrictions.or(
  Property.forName("areaId").in(criteria1),
  Property.forName("areaId").in(criteria2)
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM