Добавяне на филтър към нанесена таблица oneToMany в hibernate/Spring

Използвам hibernate4 и spring3.1 в текущия си проект.

Имам две таблици с едно към много картографиране. Използвам картографиране, базирано на анотации. Картографирането се извършва по следния начин:

public class TableA {
       @Id
       private Long  id;

       @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
       @JoinColumn(name = "sample_id")
       private Set<TableB> tableBList;

       // setter getter
   }


   public class TableB{   
       @Id
       private Long                  id;

       private Long                  sample_id;

       private Date added_date;
   }

Когато пуснах заявка като тази:

String hql = "FROM TableA WHERE id = 5";
return sessionFactory.getCurrentSession().createQuery(hql).list();

Той ще върне всички редове от TableB, които са картографирани за id =5. Но искам да добавя още едно условие като added_date = XXXX.

Възможно ли е да добавите филтър в заявка или по друг начин в колона added_date?


person Naresh J    schedule 30.07.2013    source източник
comment
API на критериите е най-добрият начин за справяне с много условия.   -  person Ammar    schedule 30.07.2013


Отговори (1)


Да, възможно е от заявката:

погледнете hql документацията: http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/#queryhql

Искате нещо като

String hql = "select a from TableA as a inner join a.tableBList as b WHERE a.id = :id and b.added_date > :after";
Query q = sessionFactory.getCurrentSession().createQuery(hql);
q.setParameter("id", 5);
q.setParameter("after", date);
q.list();
person Thierry    schedule 30.07.2013
comment
Чрез тази заявка получавам SET от два различни списъка. Един, който съдържа всички данни от TableB и друг списък, който съдържа единствения задължителен списък. Но искам да извлека само необходимия списък. - person Naresh J; 30.07.2013
comment
Моля, прочетете документацията: раздел 16.6: Клаузата за избор. Добавяне на избор от TableA... актуализира моя отговор - person Thierry; 30.07.2013