Как выбрать строки в отношении OneToMany - PullRequest
0 голосов
/ 13 июня 2019

Я не могу отфильтровать строки в отношении 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 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...