簡體   English   中英

如何使用Criteria API從Hibernate中的實體獲取列表?

[英]How to get list from Entity in Hibernate using Criteria API?

最近,我在使用Criteria API時遇到了問題。 這是我第一次接觸。 這是我的OfficeEntity的一部分。

@Entity
@Table(name = "office")
public class OfficeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column (name = "office_id")
private Long id;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="office_id", referencedColumnName = "office_id")
private List<WorkerEntity> workers = new ArrayList<>();

目標-從特定的辦公室實體中獲取工人實體的列表。 到目前為止,我已經弄清楚了如何通過以下方式實現目標:

    @Override
public List<WorkerEntity> getWorkersByOffice(long officeId) {

    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<OfficeEntity> query = cb.createQuery(OfficeEntity.class);

    Root<OfficeEntity> office = query.from(OfficeEntity.class);
    query.select(office).where(cb.equal(office.get("id"),officeId));

    TypedQuery<OfficeEntity> typedQuery = entityManager.createQuery(query);
    OfficeEntity foundOffice = typedQuery.getSingleResult();

    return foundOffice.getWorkers();

}

它工作正常,但我認為我過於依賴Java List接口方法而不是Criteria API。 我是否可以僅通過在Criteria中創建適當的查詢來獲取此WorkerEntity列表(OfficeEntity中的字段“ workers”)? 如果這樣,可以提供任何建議或適當的解決方案嗎?

最好的問候,新手休眠和標准。

我假設Office和Worked實體之間存在兩種綁定方式。 如果沒有,則使用@ManyToOne注釋在Worked中創建父實體。 然后下面的代碼應該工作


@Override
    public List<WorkerEntity> getWorkersByOffice(long officeId) {

        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<WorkerEntity> query = cb.createQuery(WorkerEntity.class);

        Root<WorkerEntity> worker= query.from(WorkerEntity.class);
        OfficeEntity office  = new OfficeEntity();
        office.setId(officeId);
        query.select(worker).where(cb.equal(worker.get("office"),office));

        TypedQuery<OfficeEntity> typedQuery = entityManager.createQuery(query);
        List<WorkerEntity> workerList= typedQuery.getResultList();

        return workerList;

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM