Hibernate Criteria 获取每个父实体的一对多子实体的最大 ID
Hibernate Criteria to get maximum ID of the child of one-to-many for each parent entity
我有两个类:
public class DocumentRecord {
@Column(name = "id")
private Long id;
@OneToMany(...)
@JoinColumn(name = "document_id")
private final List<DocumentHistRecord> history = new ArrayList<>();
... other fields
}
和
public class DocumentHistRecord {
@Id
@Column(name = "id")
private Long id;
... other fields
}
我想要的是将 DocumentHistRecord 的最大 ID 附加到每个文档。每个文档在其历史记录中至少有一个 DocumentHistRecord。
如何使用 Hibernate Criteria 在 Hibernate 4.3.7 中实现这一点 API?
这是表格示例和我想要的结果:
Table DocumentRecord: Table DocumentHistRecord
id id | documentId
-- -----------------
1 1 | 1
2 2 | 1
3 3 | 1
4 4 | 2
5 | 3
6 | 3
7 | 4
8 | 4
结果将是:
id (from DocumentHistRecord table)
--
3
4
6
8
提前感谢您的回答。
看起来像这样:
final Criteria criteria = session.createCriteria(DocumentRecord.class);
criteria.createCriteria("history" ,"h");
ProjectionList pl = Projections.projectionList();
pl.add(Projections.groupProperty("id"));
pl.add(Projections.max("h.id"));
criteria.setProjection(pl);
List res = criteria.list();
我有两个类:
public class DocumentRecord {
@Column(name = "id")
private Long id;
@OneToMany(...)
@JoinColumn(name = "document_id")
private final List<DocumentHistRecord> history = new ArrayList<>();
... other fields
}
和
public class DocumentHistRecord {
@Id
@Column(name = "id")
private Long id;
... other fields
}
我想要的是将 DocumentHistRecord 的最大 ID 附加到每个文档。每个文档在其历史记录中至少有一个 DocumentHistRecord。
如何使用 Hibernate Criteria 在 Hibernate 4.3.7 中实现这一点 API?
这是表格示例和我想要的结果:
Table DocumentRecord: Table DocumentHistRecord
id id | documentId
-- -----------------
1 1 | 1
2 2 | 1
3 3 | 1
4 4 | 2
5 | 3
6 | 3
7 | 4
8 | 4
结果将是:
id (from DocumentHistRecord table)
--
3
4
6
8
提前感谢您的回答。
看起来像这样:
final Criteria criteria = session.createCriteria(DocumentRecord.class);
criteria.createCriteria("history" ,"h");
ProjectionList pl = Projections.projectionList();
pl.add(Projections.groupProperty("id"));
pl.add(Projections.max("h.id"));
criteria.setProjection(pl);
List res = criteria.list();