OpenJPA 连接查询没有 return 任何数据

OpenJPA join query does not return any data

我有这样的实体结构来保持建筑物、房间和楼层:

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

我正在查看条件 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()));

但也无济于事。我一直收到空列表或异常。

获得所有建筑房间的正确方法是什么?

正确的加入代码是:

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