- My Hibernate bean ContentElementTypeProperty ссылается на другой тестовый экземпляр Hibernate Bean TestUnitType (много к одному).
- TestUnitType - это поле ContentElementTypeProperty.
- В базе данных testunittypeid есть столбец в таблице contentelementtypeproperty.
Я ищу, чтобы получить все строки из contentelementtypeproperty ГДЕ testunittypeid является нулевым или testunittypeid = [дано Длинные значение]Ограничение критериев гибернации по столбцу объединения
Способ, показанный ниже, возвращает 0 результатов.
Однако, если я удалю: либо
.add(Restrictions.isNull("testUnitType"));
или
cr.createCriteria("testUnitType")
.add(Restrictions.eq("id", tutId));
я получаю результаты (но явно не все строки, мне нужно).
Как объединить эти два так, чтобы они выполняли критерии ИЛИ, каждый из которых создается под отдельным вызовом createCriteria?
@Transactional(propagation = Propagation.MANDATORY)
public List<ContentElementTypeProperty> getContentElementTypePropertiesForTut(Long businessId, Long tutId)
throws TestStructureException
{
SS.getLogger().debug("getContentElementTypePropertiesForTut business id:"+businessId +" tutid: "+tutId);
try
{
Session session = this.sessionFactory.getCurrentSession();
Criteria cr = session.createCriteria(ContentElementTypeProperty.class)
.add(Restrictions.isNull("testUnitType"));
cr.createCriteria("testUnitType")
.add(Restrictions.eq("id", tutId));
cr.createCriteria("business").add(Restrictions.eq("id", businessId));
List<ContentElementTypeProperty> result = cr.list();
SS.getLogger().debug("getContentElementTypePropertiesForNullTutOnly result size:"+result.size());
return result;
}
catch (Exception e)
{
SS.getLogger().error(e.getMessage(), e);
throw new TestStructureException(e);
}
}
UPDATE После консультации с Malagunna, я попытался с помощью критерия (ниже). Однако это возвращает строки для crAux2.
Criteria cr = session.createCriteria(ContentElementTypeProperty.class);
cr.createAlias("testUnitType", "tut");
Criterion crAux1 = Restrictions.isNull("testUnitType");
Criterion crAux2 = Restrictions.eq("tut.id", tutId);
cr.add(Restrictions.or(crAux1, crAux2));
Malaguna, это перемещает меня в правильном направлении, благодаря миллиону. Однако crAux2 имеет ошибку компиляции «Невозможно преобразовать из критерия в критерий» – Jake
Он скомпилировался с использованием метода псевдонима, но теперь возвращает строки только из crAux2 – Jake