【问题标题】:playframework2 how to open multi-datasource configuration with jpaplayframework2 如何使用 jpa 打开多数据源配置
【发布时间】:2013-12-06 05:41:42
【问题描述】:

我想用 jpa 在 Play framework 2.1 中配置多个数据源。
一个是H2,另一个是Oracle。
所以我在 application.conf 中添加了这样的代码:

db.default.driver=org.h2.Driver db.default.url="jdbc:h2:file:E:/myproject/setup/db/monitor" db.default.user=sa db.default.password=sa db.default.jndiName=DefaultDS jpa.default=defaultPersistenceUnit db.oracle.driver=oracle.jdbc.driver.OracleDriver db.oracle.url="jdbc:oracle:thin:@10.1.20.10:1521:prjct" db.oracle.user=LOG_ANALYSE db.oracle.password=LOG_ANALYSE db.oracle.jndiName=OracleDS jpa.oracle=ojdbcPersistenceUnit

我不知道如何分配jpa.oracle 并给它起一个毫无意义的名字。但它没有显示任何错误。我应该改变它吗?如何改变?
主要问题是:我如何告诉 Play 哪些实体由 default 数据源管理,而其他实体由另一个 oracle 管理? 例如,A、B 类的表在 H2 中,C、D 类的表在 oracle 中。我应该为这些实体编码什么来分配数据源?

【问题讨论】:

  • 嗨@Shedom Wei 您使用的是哪个JPA 提供商和版本?尝试使用 play 2.3.7 设置 oracle 时出现异常。我正在使用休眠 4.3.8.Final。您的 persistence.xml 看起来如何?任何帮助表示赞赏。谢谢Shedom
  • @rodrigoArantes 抱歉,但我离开前公司很长时间,我无法查看这些信息。我认为您可以在 stackoverflow 中粘贴您的异常。

标签: jpa playframework playframework-2.1 multi-database


【解决方案1】:

最后,我找到了连接不同数据库源的方法。
在play中,jpa的api没有名为getJPAConfig("")的方法。
那是em()em("")的另一种构造。
所以我以以下方式访问数据库:

EntityManager em0 = JPA.em("default");     
EntityManager em1 = JPA.em("oracle"); 

就是这样!

【讨论】:

  • 这是deprecated,不适用于play framework 2.6
【解决方案2】:

我(还)没有使用过这个功能,但是你必须在你的模型上使用一个注释:

@PersistenceUnit(name="default")
@PersistenceUnit(name="oracle")

或者当您查询自己时,您也可以将其指定为:

EntityManager em = JPA.getJPAConfig("oracle").em(); 

【讨论】:

  • 很高兴收到您的来信。我尝试了您对我的项目的建议,但两者都失业了。即使是第二种方式也会遇到编译错误。我查找了PersistenceUnit 的来源并尝试了另一个参数unitName。但我又哭了。我能做什么,zzz。无论如何谢谢!
  • 我在服务中将注释添加到EntityManager,如下所示:@PersistenceUnit(name="oracle") EntityManager em = JPA.em();。它看起来像工作,但不是很好。如果我给这个名字一个错误的值em什么都得不到,而给它正确的值em总是从default而不是oracle得到,zzz。请问您有更多的建议吗?谢谢。
  • 你能分享你的最终解决方案吗?你有办法用特定的 PersistenceUnit 进行单元测试吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多