我只是想知道是否可以创建一个JQPL查询,该查询将会对表格进行选择并选择与我传递给查询的对象中至少x个y属性相匹配的所有记录。想象一下Car对象有5个属性:maxSpeed,weight,color,power,type然后我想查询数据库以获得所有至少有2个属性的汽车与我传递给查询的汽车相同(不是实际的)汽车 - 只是它的属性)。我无法找到任何东西所以我只是得到所有至少有一个属性匹配的条目(通过在我的查询中使用4个“OR”运算符),然后用Java处理结果列表。必须有一种方法只使用JPQL这样做,我将不胜感激任何提示。我到目前为止使用的查询看起来像这样:
TypedQuery<Car> query = em.createQuery(
"FROM Car c "
+ "WHERE c.maxSpeed = :maxSpeed "
+ "OR c.weight = :weight "
+ "OR c.colour = :colour "
+ "OR c.power = :power "
+ "OR LOWER(c.type) = LOWER(:type)"
, Car.class);
query = query.setParameter("maxSpeed ", car.getMaxSpeed ());
query = query.setParameter("weight ", car.getWeight());
query = query.setParameter("colour", car.getColour());
query = query.setParameter("power", car.getPower());
query = query.setParameter("type", car.getType());
query.getResultList()
答案 0 :(得分:2)
我没有测试它,但也许你可以使用带有JPQL case语句的构造:
WHERE (CASE c.maxSpeed WHEN :maxSpeed THEN 1 ELSE 0 END
+ CASE c.weight WHEN :weight THEN 1 ELSE 0 END
+ CASE c.colour WHEN :colour THEN 1 ELSE 0 END
+ CASE c.power WHEN :power THEN 1 ELSE 0 END
+ CASE LOWER(c.type) WHEN LOWER(:type) THEN 1 ELSE 0 END) > 1
每个case语句返回0或1.如果total大于1,则满足条件。