それらの間に依存関係があるいくつかのモデルがあります。モデルは次のとおりです。
@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の 1 つのモデルが含まれてい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その依存関係を取得したいと思います。
ご協力ありがとうございました