Spring Boot JPA和JDBC可以共享相同的DataSource /连接吗?

时间:2018-02-02 14:31:42

标签: hibernate jpa spring-boot jdbc datasource

Spring Boot here。我目前使用JPA / Hibernate和CrudRepository接口来处理我的所有JPA实体,到目前为止它一直很适合我。我需要执行一个需要UNION的复杂查询,据我所知,Hibernate不支持联合(或者至少不支持它们)。我通过在CrudRepository中尝试了一些打开不同的JPQL查询进行了验证,但由于Hibernate(JPA提供商)不喜欢{{1} }}

所以,我完全没有在这种情况下使用原始JDBC查询并从结果UNION执行我自己的准OR映射回到我的实体的实例。

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

ResultSet
  • 我需要两个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 ,一个用于JPA / Hibernate,另一个用于我的JDBC(两者都连接到完全相同的数据库)
  • 通过维护这两个DataSource实例,我是否会遇到性能或网络/套接字问题? 我需要做的任何特别的事情
  • 目前我并非相信我的JPA / Hibernate配置使用了连接池,但理想情况下我希望使用HikariCP来同时使用JPA / Hibernate以及我的原始JDBC查询
  • 有没有办法让我的DataSource实例(JPA / Hibernate)和我的原始JDBC连接使用完全相同的CrudRepository / config?如果是这样,这个配置/代码会是什么样的?

我知道这里有几个问题,但我相信正确的战斗疲惫的JDBC / JPA老手将能够通过快速的配置和/或代码片段解决所有这些问题!提前谢谢!

1 个答案:

答案 0 :(得分:1)

<强>休眠/ 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