如何在OneToMany关系中选择行

时间:2019-06-13 19:50:19

标签: java spring hibernate spring-boot jpa

我无法从两个实体中过滤出一对多关系中的行。

我尝试使用@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,然后将其映射到视图...

0 个答案:

没有答案