当前位置: 首页 > 知识库问答 >
问题:

带有某些逻辑的JPQL查询

沈国安
2023-03-14

我只是想知道是否可以创建一个JQPL查询,该查询将对表进行处理,并选择所有记录,这些记录至少与我传递给查询的对象的y个属性中的x个ouf匹配。假设汽车对象有5个属性:maxSpeed、weight、Colory、power、type,然后我想查询一个数据库,以获得所有至少有2个属性与我传递给查询的汽车相同的汽车(不是实际的汽车--只是它的属性)。我找不到任何东西,所以我只是获取至少有一个属性匹配的所有条目(通过在查询中使用4'或‘运算符),然后在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()

共有1个答案

赵开诚
2023-03-14

我没有测试它,但是也许您可以使用一个带有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。如果总数大于1,则满足条件。

 类似资料:
  • 我有证据: 我想从我的数据库中获得结果,它包含每个对象中的列表technicStatusList=new arraylist<>(),我想在其中有一个TechnicStatus仅值为isactive=true。 为此,我使用了相同的JPQL查询: 但是得到一个包含TechnicStatus的结果,该结果返回一个包含true和false的TechnicStatus.isactive=true,Tec

  • 比如一些带有业务逻辑的组件,其它项目要用,通常做法就是一顿ctrl+c,ctrl+v去处理,然后这边组件修改了逻辑,其它项目引用的地方一个个去改,这种不便于维护,有什么方式可以将这些业务组件封装发布到组件库呢?

  • 我需要帮助与HQL/JPQL查询JavaSpring Boot项目与Hibernate和Postgresql数据库。 主要实体是学生和课程(为简洁起见,省略了额外的字段和注释)。 学生 持久实体: 数据库表: 课程可以是存储在数据库中uuid[]字段中的不同课程周期的一部分。 持久实体: 数据库表: 我需要一个方法

  • 记录具有id和名称 带有@Convert的DocumentModel 记录转换器 如果recordIds有多个值(例如:docId=1),即使: 嵌套选择不工作 IN子句有和没有()不工作 子句的成员不工作 导致本机SQL直接无法工作 @公式不工作 而且问题似乎是记录应该是单引号-逗号分隔的,而不仅仅是逗号分隔的,因为它们是字符串。(本机SQL查询在这种情况下工作)

  • 嗨,我是编程新手,我们的任务是制作一个刽子手游戏。现在我面临的问题是猜测。程序猜对了一切,并且工作正常。虽然它不会打印出中的字母,或者它会打印出1个字母,但当我猜正确时,上一个字母会被覆盖。 那么,有谁能伸出援助之手呢? 这是我的检查代码: }