Я не могу отфильтровать строки в отношении OneToMany из двух сущностей.
Я пытался использовать аннотацию @Filter
, но я прочитал, что она плохо работает с кэшированием.То же самое с inner join fetch
внутри метода createQuery
.Эти решения работают, но я хочу выяснить, есть ли другой способ сделать это.
Рассмотрим две сущности:
@Entity
public class Resource {
@Id
private int id;
@OneToMany(mappedBy = "resource")
private List<ResourceTranslation> translations;
}
@Entity
@Table(name = "resource_translation")
public class ResourceTranslation {
@Id
private int id;
@Column
private String language;
@Column
private String name;
@ManyToOne
@JoinColumn(name = "resource_id")
private Resource resource;
}
Теперь я хочу получить ресурс только с переводом на английский язык.:
SELECT DISTINCT *
FROM resource
INNER JOIN resource_translation as rt ON rt.resource_id = resource.id
WHERE rt.language = 'en-us'
И в Hibernate я хочу получить только отношение (ResourceTranslation) внутри Списка переводов, например:
{
"id": 123,
"translations": [
{
"id": 321,
"name": "my resource",
"language": "en-us"
}
// Hibernate aggregates all the others translations here...
]
}
Возможно ли достичь этого результата?
Я думаю, что лучшим подходом было бы создать Entity ResourceTranslated
и затем сопоставить его с View ...