【问题标题】:Add restrictions based on joint table values添加基于联合表值的限制
【发布时间】:2022-12-17 22:50:13
【问题描述】:

我有一个名为队列的表,模型如下所示:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "queue_id")
private Integer queueId;

@ManyToOne
@JoinColumn(name = "location_id", nullable = false)
private Location location;

@ManyToOne
@JoinColumn(name = "queue_room_id", nullable = true)
public QueueRoom queueRoom;

@Override
public Integer getId() {
    return getQueueId();
}

@Override
public void setId(Integer id) {
    this.setQueueId(id);
}

我正在尝试根据位置 uuid 和队列房间 uuid 检索队列。队列表的外键是id。我可以分别按位置 uuid 和房间 uuid 获取队列,但我似乎无法想出一种方法来结合这两种限制。任何建议将不胜感激。

@Override
public List<Queue> getAllQueuesByLocationAndQueueRoom(String locationUuid, String queueRoomUuid) {
    Criteria criteria = getCurrentSession().createCriteria(Queue.class, "q");
    //Include/exclude retired queues
    includeVoidedObjects(criteria, false);
    
    Criteria locationCriteria = criteria.createCriteria("location", "ql");
    locationCriteria.add(Restrictions.eq("ql.uuid", locationUuid));
    Criteria queueRoomCriteria = criteria.createCriteria("queueRoom", "qr");
    queueRoomCriteria.add(Restrictions.eq("qr.uuid", queueRoomUuid));
    
    return (List<Queue>) queueRoomCriteria.list();
}

【问题讨论】:

    标签: java jpa


    【解决方案1】:

    您必须使用 and 加入这两个条件。这就是 JPA JPQL 的样子

    select q from Queue
    where q.location.uuid = :location_uuid
    and q.queueRoom.uuid = :room_uuid
    

    这将是 JPA Criteria API

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Queue> criteria = builder.createQuery(Queue.class);
    Root<Queue> queueRoot = criteria.from(Queue.class);
    criteria.where(
        builder.and(
            builder.equal(queueRoot.get("location").get("uuid"), location_uuid),
            builder.equal(queueRoot.get("queueRoom").get("uuid"), room_uuid)
        )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多