java - 使用 Ebean 在 Play Framework 2.3.3 中映射 @ManyToOne 关系的异常

标签 java jpa orm playframework-2.0 ebean

我在映射关系时遇到问题,因为它映射到 Play Framework 2.3.3 中的模型。

我有两个模型 GaDataModelBusinessAccounts,它们之间存在关系 ManyToOne,在模型 GaDataModel 中我声明类 GaDataModelPK 内的关系基本上是 @Embedabble PK。

以下类是我当前的实现。

GaDataModelPK

@Embeddable
public class GaDataModelPK implements Serializable {

    @ManyToOne
    @JoinColumn(nullable = false)
    public BusinessAccount businessAccount;

    @Column(nullable = false)
    public String date;

    @Override
    public boolean equals(Object o) {
        ...
    }

    @Override
    public int hashCode() {
        ...
    }
}

GaData模型

@Entity
@Table(name = "ga_data_model")
public class GaDataModel extends Model {

    @EmbeddedId
    public GaDataModelPK gaDataModelPK;
        ...
    }
}

商业帐户

@Entity
@Table(name = "business_account")
public class BusinessAccount extends Model {

    @EmbeddedId
    public BusinessAccountPK businessAccountPK;

    public String portal;

    public String region;
    public String category;

    public String hqCountry;
    public String portalCountry;

    @OneToMany(mappedBy = "business_account", cascade = {CascadeType.REMOVE})
    public List<GaDataModel> gaDataModels;

    ...
}

但是当我尝试运行该应用程序时,出现以下异常

PLAY WEBBROWSER 中的堆栈跟踪

java.lang.RuntimeException: Error reading annotations for repository.models.GaDataModelPK
     com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:54)
     com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1028)
     com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:455)
     com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEmbeddedDeployment(BeanDescriptorManager.java:478)
     com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:232)
     com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:114)
     com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:204)
     com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:65)
     com.avaje.ebean.EbeanServerFactory.create(EbeanServerFactory.java:58)
     play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:89)
     play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
     play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:91)
     scala.collection.immutable.List.foreach(List.scala:318)
     play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:91)
     play.api.Play$$anonfun$start$1.apply(Play.scala:91)
     play.api.Play$$anonfun$start$1.apply(Play.scala:91)
     play.utils.Threads$.withContextClassLoader(Threads.scala:21)
     play.api.Play$.start(Play.scala:90)
     play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:142)
     play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:115)
     scala.Option.map(Option.scala:145)
     play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:115)
     play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:113)
     scala.util.Success.flatMap(Try.scala:200)
     play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:113)
     play.core.ReloadableApplication$$anonfun$get$1.apply(ApplicationProvider.scala:105)
     scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
     scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
     scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1361)
     scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
     scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
     scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)

游戏控制台中的堆栈跟踪:

    java.lang.NullPointerException: null
    at play.libs.ws.ning.NingWSPlugin.onStop(NingWSPlugin.java:31) ~[play-java-ws_2.10-2.3.1.jar:2.3.1]
    at play.api.Play$$anonfun$stop$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$2.apply(Play.scala:108) [play_2.10-2.3.1.jar:2.3.1]
    at play.api.Play$$anonfun$stop$1$$anonfun$apply$1$$anonfun$apply$mcV$sp$2.apply(Play.scala:107) [play_2.10-2.3.1.jar:2.3.1]
    at scala.collection.immutable.List.foreach(List.scala:318) [scala-library.jar:na]
    at play.api.Play$$anonfun$stop$1$$anonfun$apply$1.apply$mcV$sp(Play.scala:107) [play_2.10-2.3.1.jar:2.3.1]
[info] play - database [default] connected at jdbc:mysql://localhost/analytics
[error] c.a.e.s.d.BeanDescriptorManager - Error in deployment
java.lang.RuntimeException: Error reading annotations for repository.models.GaDataModelPK
    at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:54) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1028) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:455) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEmbeddedDeployment(BeanDescriptorManager.java:478) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:232) ~[avaje-ebeanorm-3.3.4.jar:na]
Caused by: java.lang.RuntimeException: Error with association to [class repository.models.BusinessAccount] from [repository.models.GaDataModelPK.businessAccount]. Is class repository.models.BusinessAccount registered?
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readManyToOne(AnnotationAssocOnes.java:165) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:63) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:54) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:45) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1028) ~[avaje-ebeanorm-3.3.4.jar:na]
[error] application - 

! @6j99d9gfb - Internal server error, for (GET) [/] ->

play.api.UnexpectedException: Unexpected exception[RuntimeException: Error reading annotations for repository.models.GaDataModelPK]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:151) ~[play_2.10-2.3.1.jar:2.3.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:115) ~[play_2.10-2.3.1.jar:2.3.1]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:115) ~[play_2.10-2.3.1.jar:2.3.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:113) ~[play_2.10-2.3.1.jar:2.3.1]
Caused by: java.lang.RuntimeException: Error reading annotations for repository.models.GaDataModelPK
    at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:54) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1028) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:455) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEmbeddedDeployment(BeanDescriptorManager.java:478) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:232) ~[avaje-ebeanorm-3.3.4.jar:na]
Caused by: java.lang.RuntimeException: Error with association to [class repository.models.BusinessAccount] from [repository.models.GaDataModelPK.businessAccount]. Is class repository.models.BusinessAccount registered?
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readManyToOne(AnnotationAssocOnes.java:165) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.readAssocOne(AnnotationAssocOnes.java:63) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.AnnotationAssocOnes.parse(AnnotationAssocOnes.java:54) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:45) ~[avaje-ebeanorm-3.3.4.jar:na]
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1028) ~[avaje-ebeanorm-3.3.4.jar:na]

最佳答案

我有这样的东西:

@OneToMany(mappedBy="contact", targetEntity= gaDataModels.class)

@ManyToOne
@JoinColumn(name="business_account", nullable=false)

这是在 Play 2.1.1 中使用的,但我看不出有什么理由它不起作用。

关于java - 使用 Ebean 在 Play Framework 2.3.3 中映射 @ManyToOne 关系的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25387419/

相关文章:

Java网络服务: User defined meta-data

java - Spring Integration http 出站网关和 UTF-8

JavaFx MediaPlayer 每小时播放一首 mp3

java - JPA @UniqueConstraint 看不到列

java - hibernate :saving child entity

java - 在 OpenSessionInViewFilter 之后没有定义名为 'sessionFactory' 的 bean

c# - 使用 MySQL .Net Core ADO 执行多查询

java - 返回相反枚举的优雅方式

java - Spring 有 ORM,还是只使用 ORM 框架?

php - ORM 中的对象是否应该包含 CRUD 以外的操作?