Предполагая, что ваше отображение работает, я думаю, что вы, возможно, захотите написать запрос, используя сущность MyTableWordTranslation, так как она владеет множеством в одну сторону, она получит искомый объект «MyTable».
Это в классе DAO, в запросах HQL, но какой запрос мне следует написать? Сейчас у меня есть SELECT mytable ИЗ MyTable mytable
Я пытался сопоставить с @OneToMany фильтр @Where, но как я могу установить параметр в этом фильтре: @Where (clause = "language_id =
'en' ")? Язык указывается в запросе GET из
клиент.
В тех случаях, когда ваш запрос не создается во время выполнения, вы можете аннотировать свою сущность аннотацией @NamedQueries. Внутри вашей аннотации вы можете предоставить массив аннотаций @NamedQuery, которые имеют атрибуты «name» и «query». Атрибут name позволяет вам ссылаться на ваш запрос для значения запроса. В этом конкретном примере это будет выглядеть примерно так:
@NamedQueries(value = {@NamedQuery(name = "MyTableWordTranslation.getWordByLanguage", query = "SELECT mtwt.mytable FROM MyTableWordTranslation mtwt where mtwt.myTable.id=:wordId and mtwt.language.id = :languageId"),
...more queries,
.,
.})
@Entity
@Table(name="MY_TABLE_WORD_TRANSLATION")
public class MyTableWordTranslation {
Теперь, когда вы захотите использовать этот запрос, вы можете получить к нему доступ через менеджера сущностей в вашем DAO следующим образом.
Query query = entityManager.createNamedQuery("MyTableWordTranslation.getWordByLanguage");
query.setParameter("wordId", wordId);
query.setParameter("languageId", languageId);
MyTable mt = (MyTable) query.getSingleResult();
Вот ссылка, которая должна помочь лучше объяснить NamedQueries: https://www.javatpoint.com/hibernate-named-query