我有一些模型,它们之间有依赖关系。以下是模型:
@Entity
public class A extends Model {
@Required
public String name;
@Required
@ManyToOne(fetch = FetchType.LAZY)
public C modelC;
}
@Entity
public class B extends Model {
@Required
public String name;
}
@Entity
public class C extends Model {
@Required
public Date lastUpdate;
@Required
@OneToMany(mappedBy = "modelC", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public List<A> modelsA;
@Required
@ManyToOne(fetch = FetchType.LAZY)
public B modelB;
}
正如您所见,名为C
的模型包含多个名为A
的模型和一个名为B
的模型。
我想要做的是选择具有不同模型C
(与B
不同)且具有最大id
的所有模型date
(更接近当前日期)。另外,我想选择模型C
的依赖项(A
列表和模型B
)。
我有查询加载所有模型C
及其依赖项:
select distinct c from C c
left join fetch c.modelsA
left join fecth c.modelB
我想我只能检索不同的模型C
(不同于模型B
的id)及其与此查询的依赖关系:
select distinct c from C c
left join fetch c.modelsA
left join fetch c.modelB b
group by b.id
但是,如何检索具有最高日期的不同模型C
?这不起作用:
select distinct c, max(c.lastUpdate) as maxUpdate from C c
left join fetch c.modelsA
left join fetch c.modelB b
group by b.id
你能帮助我吗?
以下是数据示例:
B(b1):
name: First model of type B
B(b2):
name: Second model of type B
C(c1):
lastUpdate: 100
modelB: b1
C(c2):
lastUpdate: 200
modelB: b2
C(c3):
lastUpdate: 300
modelB: b1
A(a1):
name: A1
modelC: c1
A(a2):
name: A2
modelC: c1
A(a3):
name: A3
modelC: c2
A(a4):
name: A4
modelC: c3
我想检索此c2
和c3
及其依赖项。
感谢您的帮助
答案 0 :(得分:0)
你可以使用order By,而且使用hql你没有义务做左连接,join也是valide,因为获取利用率很高。
max(modelC.lastUpdate)也许试试这个或c.modelC.lastUpdate
例如
query = "select u from User u "
+ "left join u.linkedAccounts linkedAccounts "
+ "where u.active = true "
+ "and **linkedAccounts.providerKey** = :pProviderKey" ),