小编典典

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

spring-boot

我的数据库中有很多列,并且不想为它们所有都编写自定义查询,因此请考虑以下方法为每个列名动态运行,我将其列为 column_name
。这样的事情可能吗,或者还有其他方法可以做到吗?

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

顺便说一句,在Springhibernate中没有提到这种情况。


阅读 726

收藏
2020-05-30

共1个答案

小编典典

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

Hibernate基本上在这里使用PreparedStatement,在尚未知道要查询的表/列的地方无法准备语句。

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

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();
}

还要记住,您在这里所做的只是一个投影,您将不会获得项目列表,而是对象列表。

2020-05-30