Reputation: 7719
I have two classes that have 2 relations between them.
User class:
@Entity
@Table(name="User")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="Id")
private long id;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="admin")
private Set<Group> ownedGroup;
@ManyToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="members")
private Set<Group> memberGroups;
//.......
}
Group class:
@Entity
@Table(name="Group")
public class Group implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="Id")
private long id;
@NotNull
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="Admin", referencedColumnName="Id")
private User admin;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name = "Group_User",
joinColumns = @JoinColumn(name = "Group"),
inverseJoinColumns = @JoinColumn(name = "User"))
private Set<User> members;
//....
}
When I want to start the App, I get this exception:
org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.myproject.model.User.memberGroups[com.querydsl.core.group.Group]
I saw other similar posts, but apparently they didn't use javax.persistence.Entity
and it was the root cause of this error. Any idea how to resolve this issue ?
Upvotes: 1
Views: 63
Reputation: 12542
Group is a reserved keyword. Use backtick to escape a reserved keyword. Check out this answer.
@Table(name = "`Group`")
Also your @ManyToMany
mapping is unfortunately not correct.
Update your Group
entity like so :
@Entity
@Table(name="`Group`") // Change your table name
public class Group implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="Id")
private long id;
@NotNull
@ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="Admin", referencedColumnName="Id")
private User admin;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "Group_User",
joinColumns = @JoinColumn(name = "group_id", referencedColumnName = "id"), //Give a column name 'group_id' and map it to Group primary key id
inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") //Give a column name 'user_id' and map it to User primary key id.
)
private Set<User> members;
...
}
Upvotes: 1