我有一个由MySQL DB支持的REST API,它具有多个实体类型,所有这些实体类型都有一个复合主键:
@Embeddable
public class EntityId {
private int id;
private int version;
}
对于诸如/ bananas之类的端点,我想返回每个香蕉的最新版本。鉴于以下情况,我能够返回所有香蕉的所有版本:
("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吗?有没有更好的方法来对实体进行版本控制?谢谢。
答案 0 :(得分:0)
我会去子查询。这个想法是。
select b from Banana b where b.version = (select max(bb.version) from Banana bb where bb.id = b.id)