【问题标题】:How to add custom column name Spring Data JPA? [duplicate]如何添加自定义列名 Spring Data JPA? [复制]
【发布时间】:2017-06-28 09:26:35
【问题描述】:

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

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

顺便说一句,在春季文档中没有提到这个案例。

【问题讨论】:

  • 不清楚你想要什么...请添加详细信息
  • 我编辑了我的问题;我的数据库中有很多列,不想为所有列编写自定义查询,因此请考虑动态为每个列名运行上述方法,这可能吗?
  • 使用 Eclipse 为您自动生成实体
  • @C.T.我根本不是这方面的专家,所以可能有更好的方法,但只要你不希望你的列经常改变,你可以只维护一个配置文件(甚至另一个数据库表)列名并从中提取以构建每个查询
  • @ScaryWombat 怎么样?

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


【解决方案1】:

您只能将您期望作为参数的值传递给 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();
}

还请记住,您在这里所做的是投影,您不会得到项目列表,而是对象列表。

【讨论】:

猜你喜欢
  • 2012-08-06
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 2012-05-18
  • 2016-09-10
相关资源
最近更新 更多