我有一个字符串列表,其中包含实体中多个属性的搜索项。我想查询数据库,并在任何一个指定的属性中检索任何具有这些字符串之一的实体。例如,假设我有一个部分名称列表:
//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支持这一点。那么,怎么办呢?
答案 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);