【问题标题】:OpenJPA join query does not return any dataOpenJPA 连接查询不返回任何数据
【发布时间】: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


    【解决方案1】:

    右连接码是:

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

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多