OpenJPA连接查询不返回任何数据

时间:2015-01-11 14:24:38

标签: openjpa criteria-api

我有实体结构用于保持建筑物,房间和地板如下:

建筑 - 一对多 - 楼层 - 一对多房间

我正在关注Criteria API,我的目标是让所有房间首先与同一楼层相关联,而不是找到与同一建筑物相关的所有房间。

至于第一项任务,我成功完成了以下代码:

CriteriaQuery<TRoom> criteria = em.getCriteriaBuilder().createQuery(TRoom.class);
Root<TRoom> troom = criteria.from(TRoom.class);
Predicate condition = em.getCriteriaBuilder().equal(troom.get("tfloor"), em.find(TFloor.class, targetRoom.getFloor().getId()));
List<TRoom> trooms = em.createQuery(criteria.where(condition)).getResultList();

我试过用不同的路径(例如“troom.get(”tfloor.tbuilding“)”或troom.get(“tfloor”)。get(“tbuilding”))和连接一样这样:

Join<TRoom, TFloor> join = troom.join("tfloor");
Predicate condition = em.getCriteriaBuilder().equal(join.get("tbuilding") , em.find(TFloor.class, targetRoom.getFloor().getBuilding().getBuildingId()));

但也没有用。我一直得到空列表或例外。

建造所有房间的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

正确的加入代码是:

CriteriaQuery<TRoom> criteria = em.getCriteriaBuilder().createQuery(TRoom.class);
Root<TRoom> troom = criteria.from(TRoom.class);
Predicate condition = em.getCriteriaBuilder().equal(troom.join("tfloor").get("tbuilding"), targetBuilding);