Hi there,
I'm trying to create a database schema using hbm2ddl tool on my first project.
However, I am getting the following exception:
[hibernatetool] javax.persistence.PersistenceException: org.hibernate.Annotation
Exception: mappedBy reference an unknown target entity property: scholastic.models.
User.administrator in scholastic.models.Administrator.instructors
I don't understand what it is I need to change in my annotations in order to make
this work. In my Administrator class I declare the following:
Code:
@Entity
@Table(name = "ADMINISTRATORS")
@PrimaryKeyJoinColumn(name = "ADMINISTRATOR_ID")
public class Administrator extends User implements Serializable
{
...
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "administrator")
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@org.hibernate.annotations.CollectionOfElements
@JoinTable(name = "INSTRUCTOR", joinColumns = @JoinColumn(name = "INSTRUCTOR_ID"))
@org.hibernate.annotations.CollectionId(columns = @Column(name="ADMIN_INSTRUCTOR_ID"), type = @org.hibernate.annotations.Type(type = "long"), generator = "sequence")
private Collection<User> instructors = new ArrayList<User>();
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, mappedBy = "administrator")
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@org.hibernate.annotations.CollectionOfElements
@JoinTable(name = "STUDENTS", joinColumns = @JoinColumn(name = "STUDENT_ID"))
@org.hibernate.annotations.CollectionId(columns = @Column(name="ADMIN_STUDENT_ID"), type = @org.hibernate.annotations.Type(type = "long"), generator = "sequence")
private Collection<User> students = new ArrayList<User>();
...
}
I'm not sure I have all the strings in quotes right.
Please understand the following hierarchy:
abstract User
|
|___ Administator extends User
|___ Instructor extends User
|___ Student extends User
As you can see, I want Administrator to have a collection of elements of type Instructor and Student (both of which are User type since both extend User just as Administrator does). I'm trying to make the hbm2ddl tool create seperate tables for each of the classes in the hierarchy including the abstract class User.
The Instructor class looks like so:
Code:
@Entity
@Table(name = "INSTRUCTORS")
@PrimaryKeyJoinColumn(name = "INSTRUCTOR_ID")
public class Instructor extends User implements Serializable
{
@ManyToOne(targetEntity = scholastic.models.Administrator.class)
@JoinColumn(name = "ADMINISTRATOR_ID", nullable = false)
private Administrator administrator;
...
public Administrator getAdministrator()
{ return administrator;
}
public void setAdministrator(Administrator administrator)
{
this.administrator = administrator;
}
...
}
The Student class is made in the same way.
Please advise,
Alan