如何在JPA orm.xml文件中编写自定义where子句

时间:2018-08-28 17:52:42

标签: spring-boot jpa orm spring-data-jpa

我的Springboot应用程序的WEB-INF文件夹中有orm.xml文件。 我在orm.xml文件中没有几个命名的本机查询。

我想根据查询中参数的值在查询中添加一个条件。

我正在寻找这样的东西:

 <named-native-query name="MyReport.countInventory">
        <query>
        SELECT COUNT(*) AS COUNT
        FROM
          Inventory
        WHERE 
         <if :date>
             add_date = :date
         </if>
        </query>
    </named-native-query>

1 个答案:

答案 0 :(得分:1)

这对于JPA是不可能的。 它只允许简单的SQL语句,而无需任何条件处理。

在许多情况下,实际上可以按照注释中所述的 Turo 在SQL本身中实现所需的条件逻辑。

由于您似乎正在使用Spring Data JPA,因此也可以使用Specifications动态创建条件。

另一种替代方法是使用MyBatis,它允许以与问题概述类似的方式构造SQL语句。 以下示例取自http://www.mybatis.org/mybatis-3/dynamic-sql.html

<select id="findActiveBlogWithTitleLike"
     resultType="Blog">
  SELECT * FROM BLOG
  WHERE state = ‘ACTIVE’
  <if test="title != null">
    AND title like #{title}
  </if>
</select>