【发布时间】:2015-01-11 14:24:37
【问题描述】:
我有这样的实体结构来保存建筑物、房间和楼层:
建筑物——一对多——楼层——一对多房间
我正在查看 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()));
但也无济于事。我不断收到空列表或异常。
获取所有建筑房间的正确方法是什么?
【问题讨论】:
标签: openjpa criteria-api