Будьте в спящем режиме Критерии: Оставленное Внешнее объединение с ограничениями на обе таблицы

Я делаю ЛЕВОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ, но я только могу ввести Ограничения на первой таблице. Существует ли путь ti, применяются на вторую таблицу также?

Вот мой код:

Criteria criteria = this.crudService
        .initializeCriteria(Applicant.class).setFetchMode("products",
              FetchMode.JOIN);.

Это работает (у заявителя есть applicantName свойство):

criteria.add(Restrictions.eq("applicantName", "Markos")

Ни одна из этих работ (продукт имеет productName свойство),

criteria.add(Restrictions.eq("productName", "product1")

criteria.add (Restrictions.eq ("products.productName", "product1")//продукты: название свойства criteria.add (Restrictions.eq ("Product.productName", "product1")//продукт: название Таблицы базы данных

И это - исключение, я получаю высказывание (если я понимаю правильно), что productName свойство не существует в Заявителе:

EJB Exception: ; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant; nested exception is: org.hibernate.QueryException: could not resolve property: products.inventedName of: org.myCompany.applicant.entity.Applicant

Я пытался использовать псевдоним, но это генерировало ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ вместо ЛЕВОГО ВНЕШНЕГО ОБЪЕДИНЕНИЯ, которое я хочу.

Как я могу ввести ограничения на обеих таблицах?

ОБНОВЛЕНИЕ:

Проблемой является, вероятно, то же как это: https://forum.hibernate.org/viewtopic.php? p=2393694

9
задан Mikko Maunu 23 June 2014 в 05:06
поделиться

1 ответ

Вы можете указать левый внешний шарнир в слиянии....

.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));

Имейте в виду, что вы делаете левый внешний шарнир с ограничением на этот столбец... по сути делая его внутренним шарниром. Если вы также хотите, чтобы заявители без продуктов, то вам также придется проверить на наличие нулевого продукта.

18
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: