Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是啥?
Posted
技术标签:
【中文标题】Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是啥?【英文标题】:What is right configuration for Play 2.4 / Ebean / JPA / hibernate-entitymanager?Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是什么? 【发布时间】:2015-12-09 17:06:01 【问题描述】:我正在尝试将 Play 2.3.10 项目迁移到版本 2.4.4。 目前正在使用:
libraryDependencies ++= Seq(javaCore, javaJdbc, javaJpa, javaEbean, javaWs, ...
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final"
我更新了构建定义:
从Build.scala
中的 libraryDependencies 中删除了 javaEbean
将.enablePlugins(PlayJava, PlayEbean, PlayEnhancer)
添加到Build.scala
将addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
添加到plugins.sbt
将addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
添加到plugins.sbt
"org.hibernate" % "hibernate-entitymanager" % "4.3.9.Final"
最后,我在一个实体上运行时遇到了这个异常:
Repeated column in mapping for entity: models.A column: _ebean_intercept (should be mapped with insert="false" update="false")
我的猜测是字节码增强有问题,但我不知道它是如何工作的。除了我将基类从play.db.ebean.Model
更新为com.avaje.ebean.Model
之外,模型类没有什么特别之处。它还有一个 @EmbeddedId
使用另一个具有 @Embeddable
的模型。
【问题讨论】:
我设法通过删除 playJpa 依赖项使其工作。对我来说幸运的是,该应用程序并没有大量使用 JPA。 我认为 JPA 和 Ebean 是做同样事情的两个工具。为什么要同时使用? @Kris JPA 可以用作实际 ORM 提供者之上的抽象层。在这种情况下,该项目通过直接导入和Ebean.createQuery(Model.class)
使用ebean,而不是使用JPA.em()
那么多。
【参考方案1】:
我不确定你为什么有hibernate-entitymanager?我假设你想使用 Ebean。如果是这样的话,这就是我的工作方式:
-
确保已将 PlayEbean 添加到启用的插件中,并将 javaJPA [仅用于注释] 和 mysql 连接器添加到 build.sbt,如下所示
build.sbt
lazy val root = (project in file(".")).enablePlugins(PlayJava,PlayEbean)
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
javaJdbc,
javaJpa,
"mysql" % "mysql-connector-java" % "5.1.34",
)
-
启用 sbt play ebean 以增强您的模型。如果您启用了 sbt-play-ebean,则无需启用 sbt-play-enhancer。
project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
-
将数据库配置和模型声明添加到
application.conf
application.conf
ebean.default = ["models.*"]
db.default.driver=<database driver>
db.default.url=<database url>
db.default.username=<username>
db.default.password=<password>
【讨论】:
以上是关于Play 2.4 / Ebean / JPA / hibernate-entitymanager 的正确配置是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在我的 Play 应用程序中使用 Ebean/JPA,如何删除 OneToOne 关系中的对象?