我在映射关系时遇到问题,因为它映射到 Play Framework 2.3.3 中的模型。
我有两个模型 GaDataModel 和 BusinessAccounts,它们之间存在关系 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/