Бумага HQL запрос для соединения таблиц

Я использую Hibernate для подключения к базе данных для проекта.

Я хотел бы получить запрос, который получает продукты из моей базы данных с описанием и именем на определенном языке. Параметр, который у меня есть, - это короткое имя языка, поэтому сначала мне нужно будет получить идентификатор языка, а затем получить текст на требуемых языках.

я попробовал следующий запрос hql, без успеха.

from Products as p
where p.productlanguages.languages.shortname like 'eng'

это образ часть базы данных, откуда должны поступать данные: database

Я получил желаемый результат с sql-запросом, но я не могу заставить его работать в спящем режиме. Но я бы предпочел сделать это в hql.

SELECT * FROM products p 
INNER JOIN productlanguage pl ON pl.Products_id = p.id 
WHERE pl.Languages_id = 
(
SELECT id FROM languages 
WHERE Shortname = 'eng'
);

может ли кто-нибудь сказать мне, как построить этот запрос hql? Спасибо.

1 ответов


попробуйте ниже:

   from Products p INNER JOIN p.productlanguages pl
   where pl.languages.shortname ='eng'

Я предполагаю, что вы уже выделили Product-Productlanguages отношения OneToMany и Productlanguages-Langages отношения ManyToOne как показано на диаграмме E-R.

EDIT: кажется, есть опечатка в Productlanguage отображение в строке public Languages getLanguages() {barcode удалить barcode в конце.

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="Languages_id", nullable=false, insertable=false, updatable=false)
public Languages getLanguages() {barcode

    return this.languages;
}