0

У меня есть 2 таблицы:один-ко-многим и множественные условия использования Критерии

  1. мастер-table с отдельными атрибутами некоторых объектов (id, name, title, ...)
  2. таблица с повторяющимися признаками (master_id, attribute_name, attribute_value)

Примеры данных для № 2:

- 10, "authors", "John Bill" 
- 10, "authors", "Merry J" 
- 10, "owners", "Chris O." 
- 11, "authors", "Andrew K." 

Это один-ко-многим:

<set name="repeating" table="xxx" cascade="none" mutable="false" lazy="true" fetch="join"> 
<key column="...."/> 
<one-to-many class="...." /> 
</set> 

Я хочу найти мастер-объект (id=10) где "authors" = "John Bill" и "authors" = "Merry J" и "owners" = "Chris O."

Для первого условия я могу сделать это таким образом:

session.createCriteria(Master.class) 
.createCriteria("repeating") 
.add(Restrictions.eq("attributeName", "authors")) 
.add(Restrictions.eq("attributeValue", "John Bill")) 
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list(); 

Как добавить другие условия, используя критерии?

Благодаря

ответ

0

Я предполагаю, что вы хотите отсоединяется критерии

DetachedCriteria dc = DetachedCriteria.forEntityName("repeating") 
    .add(Restrictions.eq("attributeName", "authors")) 
    .add(Restrictions.eq("attributeValue", "John Bill")) 
    // other rows 
    .setProjection(Projections.distinct(Property.forName("masterId"))); 

session.createCriteria(Master.class) 
    .add(Property.forName("id").in(dc)) 
    .list(); 
+0

Спасибо, но это не в порядке. «owner» - значение для «attributeName». Это означает, что это должно быть сделано следующим образом: '.add (Restrictions.eq (" attributeName "," owner ")) .add (Restrictions.eq (" attributeValue "," Chris O. "))' Но в этом случае он не вернет никаких результатов. – user3494426

+0

извините за мою ошибку. то я предлагаю вам использовать 'Restrictions.disjunction()' для построения ваших критериев, или в этом случае вы можете найти HQL легче писать. – hsluo

 Смежные вопросы

  • Нет связанных вопросов^_^