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

4

我在数据库中有很多列,不想为每一列编写自定义查询,因此考虑以下方法动态运行每个列名,我将其作为column_name。是否可能实现这样的功能或者还有其他方法可以做到这一点?

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

顺便提一下,在Spring文档中并没有提到这种情况。


不清楚你想要什么... 请添加细节。 - nhouser9
我编辑了我的问题; 我的数据库中有很多列,不想为所有列编写自定义查询,因此考虑上述方法是否可以动态运行每个列名? - C.T
使用Eclipse自动生成实体对象 - Scary Wombat
@C.T. 我并不是专家,所以可能有更好的方法,但只要您不指望列经常更改,您可以维护一个配置文件(甚至是另一个数据库表),其中包含列名,并从中提取以构建每个查询。 - nhouser9
@ScaryWombat 怎么做? - C.T
请查看此链接:https://www.eclipse.org/webtools/dali/docs/3.2/user_guide/tasks006.htm 我相信您一定可以搜索到它。 - Scary Wombat
1个回答

4

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

Hibernate在这里基本上是使用PreparedStatement进行工作,而当查询的表/列还未知时,无法准备语句。

你需要编写一些字符串替换逻辑或使用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();
}

请记住,您所做的是投影操作,您将获得一个对象列表而不是项目列表。


1
使用Spring Data规范,可以将列名作为参数“传递”。我在这里发布一个示例,https://dev59.com/0Kbja4cB1Zd3GeqPn-2I#48492077 - Georgios Syngouroglou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接