2014-11-25 47 views
0

我有一个字符串列表,其中包含实体中多个属性的搜索项。我想查询数据库并检索任何具有这些字符串中任何一个指定属性的实体。例如,说我有部分名称的列表:查询具有值列表的多个实体属性

//contents of the list (for visual purposes) 
["Mi", "Chr", "Leo", "Jo", "Par"] 

而且,让我们假设,我们不知道该列表的大小。现在,假设我有一个实体具有以下属性:

String firstName; 
String lastName; 

我如何可以检索(最好是在一个查询),其名或姓包含任何列表中的字符串的所有实体?

类似的信息(伪代码):

SELECT u FROM User u WHERE u.firstName LIKE (%Mi% OR %Chr% OR %Leo% OR %Jo% OR %Par%) 
    OR u.lastName LIKE (%Mi% OR %Chr% OR %Leo% OR %Jo% OR %Par%) 

如果有像一个像子句会是完美的,但不幸的是,我不相信JPQL支持。那么,这怎么可能呢?

回答

0

此代码使用IN条件构建查询。

String query = ""; 
String whereClause = ""; 

for(int i = 0; i < LIST.size(); i++) { 
    // using * wildcard 
    whereClause += "\"*" + LIST.get(i).toString() + "*\","; 
} 

query = String.format("SELECT User.firstName, User.lastName FROM User WHERE User.firstName IN (%s) OR User.lastName IN (%s);", whereClause, whereClause);