2017-09-21 150 views
0

我有一個表,貸款申請,其POJO是休眠 - 在標準限制

class LoanApplication{ 
int id; 
int loanNo; 
... 
} 

我還有一個POJO

class LoanFlow{ 
int id; 
int loanId; 
date reviewDate; 
... 
} 

loanFlow的下面的LoanID是映射到外鍵添加另一個類的屬性LoanApplication的ID。

我必須使用reviewDate獲取所有貸款申請。

我想寫一個標準,如:

Criteria criteria = getSession().createCriteria(LoanApplication.class); 
criteria.add(Restrictions.eq("id", someId)); 

我怎樣才能獲取REVIEWDATE也LoanFlow這個標準。

+0

的可能的複製[如何從擁有多個實體標準Hibernate](https://stackoverflow.com/questions/23395216/how-to-have-criteria-from-multiple-entities-hibernate) – XtremeBaumer

+0

是否有ManyToOne或OneToMany註釋到實體之間的關係? – adyjr

+0

@adyjr沒有沒有這樣的映射 –

回答

1
Criteria criteria = getSession().createCriteria(LoanApplication.class, "loApp"); 
criteria.createAlias("loApp.loanFlow", "flow"); 
criteria.add(Restrictions.eq("flow.id", 1)); 

可以directlly使用HQL也。 使用的createQuery()

+0

loanFlow是一個單獨的類,它不在裏面的loanApplication。 –

+0

但LoanApplication與LoanFlow配對 –

+0

您可以檢查https://stackoverflow.com/questions/8164727/how-to-implement-with-hibernate-criteria-object-the-select-query-with-inner-join –

0

你可以用子查詢做到這一點,如果沒有多對一或一對多註釋實體之間的關係:

DetachedCriteria subQuery = DetachedCriteria.forClass(LoanFlow.class, "loanFlow"); 

/*Here there is a between, but you can change it to your necessity*/ 
subQuery.add(Restrictions.between("loanFlow.reviewDate", dateBegin, dateEnd)); 
subQuery.setProjection(Projections.property("loanFlow.loanId")); 

Criteria criteria = getSession().createCriteria(LoanApplication.class, "loanApplication");   
Subqueries.propertyIn("loanApplication.id", subQuery); 

List<LoanApplication> list = criteria.list();