我无法从两个实体中过滤出一对多关系中的行。
我尝试使用@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...
]
}
是否有可能达到这个结果?
我认为最好的方法是创建一个实体ResourceTranslated
,然后将其映射到视图...