0

我有一些模型之间存在依赖关系。以下是模型:

@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(由模型的 id 区分B)及其依赖关系:

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依赖项。

谢谢您的帮助

4

1 回答 1

0

您可以使用 order By,此外,使用 hql 您不必进行左连接,连接也是有效的,请注意获取利用。

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" ),
于 2013-07-09T07:52:33.347 回答