使用值列表查询多个实体属性

时间:2014-11-25 02:30:57

标签: java java-ee jpa jpql

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

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

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

String firstName;
String lastName;

如何检索(最好在一个查询中)所有实体,其首个OR姓氏包含列表中的任何字符串?

像(伪代码):

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%)

如果有类似LIKE IN条款的东西是完美的,但不幸的是,我不相信JPQL支持这一点。那么,怎么办呢?

1 个答案:

答案 0 :(得分: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);