JPA OneToOne und ManyToMany zwischen zwei Entitäten
Ich habe früher eine Frage gestellt, denke aber, es war nicht klar genug, dass ich mit dem Code weiter arbeiten werde.
Ich habe eine Lehrereinheit und eine Abteilungseinheit
Viele Lehrer gehören zu einer Abteilung und
Eine Abteilung hat einen Lehrer, der die Abteilung leitet.
So setze ich es um.
@Entity
public class Teacher extends Model {
@Required
public String surname;
@Required
public String othernames;
...
@OneToOne(mappedBy = "deptHead")
public Department headedBy = new Department();
@ManyToOne(cascade=CascadeType.ALL)
public Department dept = new Department();
...
}
und die Abteilungseinheit
@Entity
public class Department extends Model {
@Required
public String deptName;
@OneToMany(mappedBy="dept")
public List<Teacher> teachers = new ArrayList<Teacher>();
@OneToOne
public Teacher deptHead = new Teacher();
...
}
Ich erhalte den folgenden Fehler
@6c4nj8nmg
Internal Server Error (500) for request GET /
JPA error
A JPA error occurred (Unable to build EntityManagerFactory): could not instantiate test objectmodels.Department
play.exceptions.JPAException: Unable to build EntityManagerFactory
at play.db.jpa.JPAPlugin.onApplicationStart(JPAPlugin.java:269)
at play.plugins.PluginCollection.onApplicationStart(PluginCollection.java:525)
at play.Play.start(Play.java:526)
at play.Play.detectChanges(Play.java:630)
at play.Invoker$Invocation.init(Invoker.java:198)
at Invocation.HTTP Request(Play!)
Caused by: org.hibernate.InstantiationException: could not instantiate test objectmodels.Department
at org.hibernate.engine.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:48)
at org.hibernate.engine.UnsavedValueFactory.getUnsavedIdentifierValue(UnsavedValueFactory.java:67)
at org.hibernate.tuple.PropertyFactory.buildIdentifierProperty(PropertyFactory.java:67)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:135)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:485)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:133)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
at play.db.jpa.JPAPlugin.onApplicationStart(JPAPlugin.java:267)
... 5 more
Caused by: java.lang.reflect.InvocationTargetException
at org.hibernate.engine.UnsavedValueFactory.instantiate(UnsavedValueFactory.java:45)
... 15 more
Caused by: java.lang.StackOverflowError
at java.lang.Class.searchMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at play.classloading.enhancers.PropertiesEnhancer$FieldAccessor.invokeWriteProperty(PropertiesEnhancer.java:268)
at models.Department.<init>(Department.java:23)
at models.Teacher.<init>(Teacher.java:47)
at models.Department.<init>(Department.java:26)
...
Benötigt Hilfe bei diesen