当前位置: 首页 > 知识库问答 >
问题:

Spring Boot JPA和JDBC能否共享相同的数据源/连接?

孟韬
2023-03-14

这里是Spring Boot。我目前在我的所有JPA实体中使用JPA/Hibernate以及CrudRepository接口,到目前为止它一直对我很有用。我需要执行一个需要UNION的复杂查询,据我所知,Hibernate不支持联合(或者至少不容易支持它们)。我已经通过在我的CrudRepository中尝试了十几个不同的JPQL查询进行了验证,所有这些查询都失败了,因为Hibernate(JPA提供程序)不喜欢UNION

因此,在这一种情况下,我完全可以使用原始JDBC查询,并从结果集到实体实例进行自己的准OR映射。

我关心的与管理JDBC连接有关。我在应用程序配置(YAML)文件中配置我的JPA/Hibernate连接配置:

spring:
  cache:
    type: none
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myapp_db?useSSL=false
    username: root
    testWhileIdle: true
    validationQuery: SELECT 1
  jpa:
    show-sql: false
    hibernate:
      ddl-auto: none
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
    properties:
      hibernate.dialect: org.hibernate.dialect.MySQL5InnoDBDialect
      hibernate.cache.use_second_level_cache: false
      hibernate.cache.use_query_cache: false
      hibernate.generate_statistics: false
      hibernate.hbm2ddl.auto: validate
  • 我需要两个DataSources,一个用于JPA/Hibernate,另一个用于我的JDBC(毕竟两者都连接到完全相同的DB)
  • 维护这两个DataSource实例会出现性能或网络/套接字问题吗?我需要做的任何特殊事情
  • 目前我不相信我的JPA/Hibernate配置会使用连池,但理想情况下,我希望使用HikariCP来为JPA/Hibernate以及我的原始JDBC查询进行池化
  • 有没有办法让我的CrudRepository实例(JPA/Hibernate)和我的原始JDBC连接都使用相同的DataSource/config?如果是这样,这个配置/代码会是什么样子?

我知道这里有几个问题,但我相信对战斗感到厌倦的JDBC/JPA老兵将能够通过配置和/或代码的快速片段来解决所有这些问题!提前谢谢!

共有1个答案

巫马刚洁
2023-03-14

Hibernate/SQL

首先阅读文档如何使用Hibernate执行SQL:

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#sql

示例:

List<Object[]> persons = entityManager.createNativeQuery("SELECT * FROM Person" ).getResultList();

HikariCP公司

如果您可以使用Spring Boot 2,因为HikariCP是默认的连接池。

否则请阅读本文:

http://therealdanvega.com/blog/2017/07/26/use-hikaricp-next-spring-boot-project

 类似资料:
  • 我有三个azure功能和两个webapp,我希望所有应用都在同一个应用服务计划中,但azure manual和maven都不允许添加同一个应用服务计划。 在azure中,是否可以在同一应用程序服务计划中添加web和功能应用程序?

  • 我有两个不同的Spring批处理项目,它们都被配置为元数据表具有相同的数据源(相同的DB模式): > application.properties(Spring Batch A)

  • 我有两个Kafka连接器节点,分别是Node-A和Node-B。 我在每个节点中运行一个分布式工作器(指向同一个Kafka集群)。 组id和客户机id在两个分布式工作线程中是唯一的。 连接器任务是在两个节点上使用 http POST 请求成功创建的。连接器任务为同一主题生成消息。 注意:我知道分配的工人应该有相同的组id来分配任务。但我是针对一个具体的案例,作为一个实验来做上面所说的。 我使用来自

  • 问题内容: 我的GUI中有多个组合框,所有组合框都需要数据。此数据将随机更改,因此需要一种快速的方法来保持所有值同步。我遇到了DefaultComboBoxModel,它实际上非常合适。唯一的事情是,我需要组合框彼此独立- 意思是:如果我在一个上选择一个值,则所有其他框都不应更改。我做了一些研究,并阅读了标准的Java教程,但没有一个告诉我如何使用DefaultComboBoxModel来实现这一

  • 来自维基百科: 要发起跨源请求,浏览器发送带有源HTTP标头的请求。这个标题的值是为页面服务的站点。例如,假设http://www.example-social-network.com上的一个页面试图访问online-personal-calendar.com中的用户数据。如果用户的浏览器实现了CORS,则将发送以下请求头: 来源:http://www.example-social-network

  • 我们的redisson.yaml文件内容: 我们使用hibernate与postgresql数据库交互,它是我们的hibernate连接属性文件内容: