java使用version作为部分主键,如何在给定id的情况下获取实体的最新版本?
我有一个由MySQL DB支持的REST API,它有多种实体类型,所有实体类型都有一个复合主键:
@Embeddable
public class EntityId {
private int id;
private int version;
}
对于诸如/banana之类的端点,我想返回每个banana的最新版本。我可以返回所有香蕉的所有版本,如下所示:
("SELECT b FROM BananaEntity b").getResultList();
这将产生:
[
{
entityId: {
id: 1,
version: 1
},
name: "Banana A"
},
{
entityId: {
id: 1,
version: 2
},
name: "Banana A"
},
{
entityId: {
id: 1,
version: 3
},
name: "Banana A"
},
{
entityId: {
id: 2,
version: 1
},
name: "Banana B"
},
{
entityId: {
id: 2,
version: 2
},
name: "Banana B"
},
]
如何取而代之的是只检索每个香蕉的最新版本,这样我只能看到香蕉1的V3和香蕉2的V2?我能够找到获取id/版本对所需的查询:
select id, max(version) from action group by id
但我还没有弄清楚如何得到整个香蕉实体。我应该改为使用Criteria API吗?是否有更好的方法来版本化我的实体?谢谢
# 1 楼答案
我会选择子查询。想法是