Play!2.1 通过JPA连接多个数据库

简介:   Play framework连接多数据库很简单。 但是这个很简单耗费了我整整两天的时间来找到这个答案。 还好苍天,我还是找到了。   =============================================================   Play通过Ebean好像可以很方便的链接多数据库,但是我使用的是JPA。

 

Play framework连接多数据库很简单。

但是这个很简单耗费了我整整两天的时间来找到这个答案。

还好苍天,我还是找到了。

 

=============================================================

 

Play通过Ebean好像可以很方便的链接多数据库,但是我使用的是JPA。

所以关于EBEAN是不是能“很方便的”连接多数据库我尽量不发表言论。

 

Hibernate连接数据库的方法据说有两种:

1.注@PersistenceUnit或@PersistenceContext

2.配置JPA.getJPAConfig

完全不知道的可以继续往下看,否则可以跳过这一段。

 

先说想Play JPA中多数据源的配置吧。

 先增加持久化单元:在conf/META-INF的persistence.xml中增加,完后是这样:

<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>DefaultDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        </properties>
    </persistence-unit>
    
    <persistence-unit name="ojdbcPersistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <non-jta-data-source>OracleDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        </properties>
    </persistence-unit>

 

然后在application.conf中增加数据源,完后如下:

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:file:E:/work/setup/db/data"
db.default.user=sa
db.default.password=sa
db.default.auth=false
db.default.jndiName=DefaultDS
jpa.default=defaultPersistenceUnit

db.oracle.driver=oracle.jdbc.driver.OracleDriver
db.oracle.url="jdbc:oracle:thin:@10.1.20.65:1521:abc"
db.oracle.user=LOG
db.oracle.password=LOG
db.oracle.jndiName=OracleDS
jpa.oracle=ojdbcPersistenceUnit

 接下来就是痛苦的探索如何进行多数据库访问。

在网上搜索“jpa 多数据源”找到的基本都是和SPRING结合的,没想到JPA已经快成为spring的专属了。。。

 

通过在stackof上提问,得到的答案是刚才提到的两种方法:

http://stackoverflow.com/questions/20416835/playframework2-how-to-open-multi-datasource-configuration-with-jpa

但是这两种方法都不能奏效。可以留意我在问题下面的跟注。

 

http://stackoverflow.com/questions/16611839/play-framework-2-jpa-with-multiple-persistenceunit

http://play.lighthouseapp.com/projects/57987/tickets/706-multiple-databasejpa-support

尤其后来找到这个

http://stackoverflow.com/questions/8001809/jpa-getjpaconfig-method-not-found-on-plays-api

 

幸运的是终于找到了这个

http://stackoverflow.com/questions/10911492/play-framework-2-0-connecting-to-multiple-databases

从问题下面作者的回复看到尽管

jpa.getConfig("sth").em()

 不管事,但是可以用

jpa.em("sth")

 于是改成这样:

JPA.em("default").createQuery(

大功终于告成 。只要为em()指定连接对象即可

 

 

 

 

 

 

 

目录
相关文章
|
11天前
|
JavaScript 关系型数据库 API
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
这篇文章介绍了什么是Prisma以及如何在Node.js和TypeScript后端应用中使用它。Prisma是一个开源的下一代ORM,包含PrismaClient、PrismaMigrate、PrismaStudio等部分。文章详细叙述了安装PrismaCLI和依赖包、初始化Prisma、连接数据库、定义Prisma模型、创建Prisma模块的过程,并对比了Prisma和Sequelize在Nest.js中的使用体验,认为Prisma更加便捷高效,没有繁琐的配置。
Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库
|
2天前
|
SQL 关系型数据库 MySQL
如何在PHP中连接到数据库?
在PHP中连接MySQL数据库常用的方法是MySQLi与PDO。MySQLi专为MySQL设计,支持面向对象及过程化编程,并提供预处理语句防止SQL注入。
|
9天前
|
缓存 分布式计算 DataWorks
DataWorks操作报错合集之连接数据库时出现了通信链接失败的报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
9天前
|
SQL DataWorks Java
DataWorks操作报错合集之在与某个数据库服务器建立或保持通信连接时遇到报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
17天前
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
34 2
|
21天前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
2天前
|
Oracle 关系型数据库 MySQL
入职必会-开发环境搭建17-IDEA连接数据库
IntelliJ IDEA集成了众多插件,方便开发者使用,使用IDEA自带的Database模块就可以很方便的配置、连接数据库,在 IntelliJ IDEA 中连接数据库,可以按照以下步骤进行操作。
|
5天前
|
SQL 数据库 数据安全/隐私保护
为什么程序连接不同的数据库要使用不同的账号
为什么程序连接不同的数据库要使用不同的账号
|
10天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
16天前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
27 0