Java 两个实体之间存在多个关系时引发异常
我有两个类,它们之间有两个关系 用户类别:Java 两个实体之间存在多个关系时引发异常,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我有两个类,它们之间有两个关系 用户类别: @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
@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;
//.......
}
我看到了其他类似的帖子,但显然他们没有使用
javax.persistence.Entity
,这是这个错误的根本原因。你知道如何解决这个问题吗 组是保留关键字。使用backtick转义保留关键字。查看答案
不幸的是,您的@manytomy
映射不正确。
更新您的组
实体,如下所示:
@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;
...
}
@实体
@表(name=“`Group`]”//更改表名
公共类组实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“Id”)
私人长id;
@NotNull
@manytone(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“Admin”,referencedColumnName=“Id”)
私人用户管理员;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@可接合(
name=“组用户”,
joinColumns=@JoinColumn(name=“group\u id”,referencedColumnName=“id”),//给出一个列名“group\u id”,并将其映射到组主键id
inverseJoinColumns=@JoinColumn(name=“user\u id”,referencedColumnName=“id”)//提供一个列名“user\u id”,并将其映射到用户主键id。
)
私有集合成员;
...
}
您使用的是什么数据库?另一个原因是我使用的是com.querydsl.core.group.group
而不是我自己的group
。
org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.myproject.model.User.memberGroups[com.querydsl.core.group.Group]
@Table(name = "`Group`")
@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;
...
}