如何在没有实体和JPA存储库的情况下在Spring中运行本机SQL查询?

我正在尝试在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();
  }
}
calvin1 回答:如何在没有实体和JPA存储库的情况下在Spring中运行本机SQL查询?

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

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

,

如果您拥有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

所以,我想这不是适合您的情况的方法。

Happy Hacking:)

本文链接:https://www.f2er.com/3100416.html

大家都在问