Sleep criteria

I have two objects, for example Business and Area.

Corresponding properties:
Business - area, area2, area code
- areaId, areaName

region and region2 business cards to the identifier in the region

I am trying to write Hibernate criteria that return all areas with enterprises only.

SQL looks like this: FROM region LEFT OUTER JOIN business b on a.areaId = b.area or a.areaId = b.area2 WHERE b.code! = Null GROUP BY a.areaName

This is what I have:

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));

But this does not work, I get a "no association: areaId" request exception.

Any ideas why this is happening? Thank.

+3
source share
1 answer

createAlias() , . Hibernate , , . areaId @ManyToOne @ManyToMany Business. 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)
);
+5

Source: https://habr.com/ru/post/1791296/


All Articles