如何使用 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")?如果那样的话,能否给出任何建议或适当的解决方案?
此致,
Hibernate 和 Criteria 的新手。
我假设 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;
}
最近我在使用 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")?如果那样的话,能否给出任何建议或适当的解决方案?
此致, Hibernate 和 Criteria 的新手。
我假设 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;
}