Java 将两个表连接在一起的Hibernate条件
我有两个实体,比如业务和区域 相关属性:Java 将两个表连接在一起的Hibernate条件,java,sql,hibernate,criteria,left-join,Java,Sql,Hibernate,Criteria,Left Join,我有两个实体,比如业务和区域 相关属性: 业务-区域,区域2,代码 区域-区域ID,区域名称 区域和区域2到区域id的业务地图 我正在尝试编写一个Hibernate标准,它只返回所有具有业务的区域 SQL看起来像: 从a区左外侧加入a.areaId=b.area或a.areaId=b.area2上的业务b b.code!=无效的 按a.areaName分组 这就是我所拥有的: DetachedCriteria criteria = DetachedCriteria.forClass(Busine
业务-区域,区域2,代码
区域-区域ID,区域名称 区域和区域2到区域id的业务地图 我正在尝试编写一个Hibernate标准,它只返回所有具有业务的区域 SQL看起来像: 从a区左外侧加入a.areaId=b.area或a.areaId=b.area2上的业务b b.code!=无效的 按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
未映射为对业务实体的@ManyToOne
或@ManyToOne
引用。所以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
)
小提示:使用Restrictions.isNotNull(“代码”)。在某些数据库中,“null”不同于“is not null”。您是否将关系放入实体定义中?(xml或注释)
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)
);