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.scalaaddSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0") 添加到plugins.sbtaddSbtPlugin("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 关系中的对象?

Play Ebean 从 2.4 升级到 2.5 后不生成 Id

子项目 Play 2.4 中的 Ebean 增强

玩2.4 Ebean分页问题

playframework 2.4 基本ebean配置

Play 2.4 JPA/Hibernate EntityManager 不刷新到数据库