У меня есть модели с зависимостями между ними. Вот модели:Группируйте и присоединяйтесь к Hibernate и JPA
@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
) и его зависимости с этим запросом :
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
и их зависимостей.
Спасибо за вашу помощь