2014-10-09 54 views
0

我有一種情況,我想構建一個hibernate查詢,其中我的API接受動態輸入。如何使用動態輸入構建hibernate查詢?

因爲客戶可以指定他們是否想要通過{column1}或{column1,column2}或{column1,column2,column3}作爲API的輸入。

如果他們只通過column1,我會用column1查詢。如果他們通過{column1,column2},我將使用column1 & column2查詢。等等...

關於在hibernate中構建這樣的查詢的任何建議?

+0

如果列是簡單的屬性,很容易使用QBE - http://java.dzone.com/articles/hibernate-query-example-qbe - 但如果列是外鍵到其他實體,那麼你註定要失敗 – Leo 2014-10-09 23:38:38

回答

0

看約Hibernate Criteria

對於一些虛擬的例子,你可以把它寫喜歡的;

public List<User> getAllUsersForConditions(String firstName, String lastName, int age) throws RepositoryException { 
    Criteria criteria = getCurrentSession().createCriteria(User.class); 
    if (firstName != null) { 
     criteria.add(Restrictions.eq("firstName", firstName)); 
    } 
    if (lastName != null) { 
     criteria.add(Restrictions.eq("lastName", lastName)); 
    } 
    if (lastName != null) { 
     criteria.add(Restrictions.eq("age", age)); 
    } 
    return (List<User>) criteria.list(); 
} 

另外,如果你有一個像上面例子簡單的查詢,那麼你可以使用像Query By Example說@Leo。

但是,如果你有複雜的結構,那麼這種方法與標準將工作。如果你的搜索更復雜,那麼你應該使用HQL

希望它有幫助。