【发布时间】:2014-07-23 19:16:08
【问题描述】:
给定以下实体一对多模型:
一个存储库可以链接到多个 AuditRecord。
许多 AuditRecords 都可以链接到同一个存储库
@Entity
class AuditRecordEntity {
private AuditRepositoryEntity auditRepository;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = AUDIT_REPOSITORY_DB_COLUMN_NAME, nullable = false, updatable = false)
public AuditRepositoryEntity getAuditRepository() {
return auditRepository;
}
...
}
@Entity
class AuditRepositoryEntity {
private List<AuditRecordEntity> auditRecords = new ArrayList<AuditRecordEntity>();
@OneToMany(mappedBy = "auditRepository")
public List<AuditRecordEntity> getAuditRecords() {
return auditRecords;
}
...
}
较小的更正,在下面的 ERD 图中,对于“repositoryId”,请阅读“auditRepository”
我正在尝试让 Criteria API 实现:
获取每个不同存储库的最新(按访问时间)AuditRecord?即AuditRecords 列表,每个存储库一个,其中 AuditRecord 是该存储库的最后一个 AuditRecord(在存储库有许多 AuditRecord 的情况下)。
我有 HQL 查询来执行此操作:
select auditRecord from AuditRecordEntity auditRecord where auditRecord.accessTime =
(select max(auditRecord2.accessTime) from AuditRecordEntity auditRecord2 where
auditRecord2.auditRepository = auditRecord.auditRepository)
但需要改用 Criteria APi:
CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Object> query = builder.createQuery();
Root<AuditRecordEntity> root = query.from(AuditRecordEntity.class);
// what next?
【问题讨论】:
-
你有用于 AuditRecordEntity.class 的 hibernate.hbm.xml 文件吗?
-
@hurricane 帖子已更新。
标签: java hibernate criteria criteria-api