3

I am trying to embed a smaller class as field for a bigger entity, and it is something I used in the past with play! 2.1 but right now Ebean is giving me an error during the schema creation.

Here is my class (very simple nothing fancy):

@Embeddable
public class Pricing implements Serializable {

    private Long value;

    private String currency;

    //getters and setters
}

and I am trying to embed it like this:

@Entity
public class MyEntity extends Model {

    @Id
    @GeneratedValue
    private Long id;

    @Embedded
    private Pricing priceProposed;

    //getters and setters
}

What I am trying to achieve is a table that looks something like this

----------------------------------------------------
| id | priceProposed.value | priceProposed.currency|
----------------------------------------------------
| 1  | 200                 | USD                   |
| 2  | 1200000             | JPY                   |
----------------------------------------------------

Like you see I am not trying anything difficult. But I am receiving the following error that mentions that subclassing is not supported anymore. But I do not belive this qualifies as subClassing, or am I totally wrong?

javax.persistence.PersistenceException: Entity type class models.product.Pricing is not an enhanced entity bean. Subclassing is not longer supported in Ebean
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.checkSubclass(BeanDescriptorManager.java:1482)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.setEntityBeanClass(BeanDescriptorManager.java:1433)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1150)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1070)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.createEmbedded(BeanDescriptorManager.java:475)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readEmbeddedDeployment(BeanDescriptorManager.java:498)
    at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:234)
    at com.avaje.ebeaninternal.server.core.InternalConfiguration.<init>(InternalConfiguration.java:114)
    at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:204)
    at com.avaje.ebeaninternal.server.core.DefaultServerFactory.createServer(DefaultServerFactory.java:65)
    at com.avaje.ebean.EbeanServerFactory.create(EbeanServerFactory.java:58)
    at play.db.ebean.EbeanPlugin.onStart(EbeanPlugin.java:79)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
    at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:88)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
    at play.api.Play$$anonfun$start$1.apply(Play.scala:88)
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
    at play.api.Play$.start(Play.scala:87)
    at play.api.Play.start(Play.scala)
    at play.test.Helpers.start(Helpers.java:359)
    at framework.AbstractPlayApplicationTest.setup(AbstractPlayApplicationTest.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Can someone tell me what is happening? What is this related to? Is someone seeing somethign I am doing wrong (it has been a year since my last Ebean+Play! project so I might be forgetting something really stupid)?

Community
  • 1
  • 1
le-doude
  • 3,345
  • 2
  • 25
  • 55

1 Answers1

0

You don't have to extends Model class of Ebean if you use the @Entity annotation

Lionel
  • 53
  • 5