Я делаю ЛЕВОЕ ВНЕШНЕЕ ОБЪЕДИНЕНИЕ, но я только могу ввести Ограничения на первой таблице. Существует ли путь 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
Вы можете указать левый внешний шарнир в слиянии....
.CreateAlias("products", "p", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.Add(Restrictions.Eq("p.inventedName", inventedName));
Имейте в виду, что вы делаете левый внешний шарнир с ограничением на этот столбец... по сути делая его внутренним шарниром. Если вы также хотите, чтобы заявители без продуктов, то вам также придется проверить на наличие нулевого продукта.