Добавить фильтр в сопоставленную таблицу oneToMany в спящем режиме/весне

Я использую 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.

Можно ли добавить фильтр в запросе или каким-либо другим способом в столбце add_date ?


person Naresh J    schedule 30.07.2013    source источник
comment
Criteria 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: Предложение select. Добавить выберите из таблицы A... обновил мой ответ - person Thierry; 30.07.2013