【问题标题】:How to run a native SQL query in Spring without an entity and a JPA Repository?如何在没有实体和 JPA 存储库的情况下在 Spring 中运行本机 SQL 查询?
【发布时间】:2020-03-10 18:20:53
【问题描述】:

我正在尝试在我的 Spring 应用程序中运行一些本机 SQL 查询。我没有实体或JpaRepository 类。我知道这很奇怪,但这是一个微服务,只是为了收集两个计数查询并将其发送到 Kafka。

相信我,我需要的只是查询中的这两个整数。我运行这些代码,总是返回 0。我可以在日志中看到 Hikari 正在连接到数据库,所以我不知道该怎么办。搜索了很多,但所有答案都涉及@Query 解决方案,这对我不起作用。

@Repository
@AllArgsConstructor
public class ReportRepository {


  private final EntityManager em;

  public int numberOfAccounts() {
    String sql = "SELECT count(*) FROM account";
    Query query = em.createNativeQuery(sql);
    System.out.println(query.getFirstResult());
    return query.getFirstResult();
  }

  public int numberOfSubscriptions() {
    String sql = "SELECT count(*) FROM subscriptions";
    Query query = em.createNativeQuery(sql);
    System.out.println(query.getFirstResult());
    return query.getFirstResult();
  }
}

【问题讨论】:

    标签: java sql hibernate spring-data-jpa


    【解决方案1】:

    您应该使用 JDBC 而不是实体管理器。在 JPA 下使用 JDBC,但它需要定义的实体才能工作。 JDBC 允许您管理连接并运行原始 SQL 查询。

    这是一个如何在 Spring 中执行此操作的链接: https://spring.io/guides/gs/relational-data-access/#_store_and_retrieve_data

    【讨论】:

      【解决方案2】:

      如果您有EntityManager,并且根据您所说的可以连接到数据库,请尝试以下方式:

      public int numberOfSubscriptions() {
          // >> "subscriptions" has to be the exact name of your table
          // if does not work, consider trying SUBSCRIPTIONS or Subscriptions
          String sql = "SELECT count(*) FROM subscriptions";
          Query query = em.createNativeQuery(sql);
      
          // getSingleResult() instead :)
          return ((Number) query.getSingleResult()).intValue();
      }
      

      Query.getFirstResult() 有这个(有点旧)JavaDoc:

      查询对象设置为检索的第一个结果的位置。如果 setFirstResult 未应用于查询对象,则返回 0

      所以,我会说这不是你的情况的正确方法。

      黑客愉快:)

      【讨论】:

        猜你喜欢
        • 2016-07-29
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 2019-01-06
        • 2022-11-24
        • 1970-01-01
        相关资源
        最近更新 更多