如何添加自定义列名Spring Data JPA?

时间:2017-02-10 05:59:07

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

我的数据库中有很多列,并且不想为所有这些列编写自定义查询,因此请考虑以下方法运行每个列名称dynamicaly,我将其作为 column_name 。这样的事情是可能的,还是有其他方法可以做到这一点?

      @Query("select #column_name from Item Where #column_name like %?2% ")
      List<Item> getUniqueColumn(String column_name,String column_text);

顺便提一下,在春季文献中没有提到这个案例。

1 个答案:

答案 0 :(得分:2)

您只能将您期望作为参数的值传递给HQL查询。您无法传递列名或表名。

Hibernate基本上使用PreparedStatement来处理,并且无法准备一个语句,其中查询的表/列尚未知晓。

您必须使用Criteria API编写一些String替换逻辑或构建查询

List<Object> getUniqueColumn(String column_name,String column_text){
        StringBuilder query = new StringBuilder();
        query.append("select #column_name ");
        query.append("from Item ");
        query.append("where #column_name like %?1%");

        query = query.toString("#column_name", column_name);

        session.createQuery(query).setString(1, column_text).list();
}

还要记住,你在这里做的是一个投影,你不会得到一个项目列表而是一个对象列表。