2013-07-30 46 views
0

我使用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(); 

這將返回所有從表B被映射爲ID = 5行。 但我想添加一個條件,如added_date = XXXX

是否有可能在查詢或通過在列ADDED_DATE任何其他方式增加過濾器?

+0

的標準API是處理許多條件的最佳途徑。 – Ammar

回答

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(); 
+0

通過這個查詢,我得到了兩個不同的列表。一個包含來自TableB的所有數據和包含唯一所需列表的其他列表。但我只想檢索所需的列表。 –

+0

請閱讀文檔:第16.6節:選擇條款。添加從TableA中選擇一個...更新我的答案 – Thierry