Java 如何通过Hibernate插入多个表
我需要在Hibernate中插入两个表——我有一个用户,每个用户所属的都是一个成员。因此,在创建新用户时,我需要在成员表中添加一个新条目。我试图通过创建一个映射到我的成员表的成员对象,然后将其作为映射到用户表的用户对象中的字段来实现这一点Java 如何通过Hibernate插入多个表,java,spring,hibernate,Java,Spring,Hibernate,我需要在Hibernate中插入两个表——我有一个用户,每个用户所属的都是一个成员。因此,在创建新用户时,我需要在成员表中添加一个新条目。我试图通过创建一个映射到我的成员表的成员对象,然后将其作为映射到用户表的用户对象中的字段来实现这一点 @Entity @Table(name = "USER") public class User { @Id @GeneratedValue @Column(name = "id") private int id; @C
@Entity
@Table(name = "USER")
public class User
{
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
@Column(name = "fullName")
private String fullName;
//other fields ommited
@OneToOne
@JoinColumn(name = "id")
private Member member;
我的成员pojo如下所示
@Entity
@Table(name = "MEMBER")
public class Member
{
@Id
@GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "sgpid")
private int sgpid;
@Column(name = "username")
private String username;
尝试保存对象时,我执行以下操作:
@Override
public boolean addUser(User user)
{
if (user == null)
{
throw new IllegalArgumentException("Unable to add null user");
}
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
return true;
}
这将为我提供保存在用户表中的行,但该条目不会插入到成员表中。我认为我的链接注释可能不正确,但我不太确定-请有人提供一些帮助
谢谢尝试设置@OneToOne注释的级联值:
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "id")
private Member member;
尝试设置@OneToOne注释的级联值:
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "id")
private Member member;
在用户类中,首先应该将joinColumn更改为member\u id 正如在另一个关于持久化相关实体的回答中提到的,您需要将cascade设置为persistent,我建议使用cascade All,它将在检查文档的所有操作中涉及相关实体
在用户类中,首先应该将joinColumn更改为member\u id 正如在另一个关于持久化相关实体的回答中提到的,您需要将cascade设置为persistent,我建议使用cascade All,它将在检查文档的所有操作中涉及相关实体
@JoinColumn(name=“id”)
表示用户和成员共享相同的id。您确定您的列不应该类似于“member\u id”吗?这样,每个用户都有一个指向其成员的成员id。通过两个id的用户和成员链接,但我现在可能会将其更改为用户名上的链接可能重复的@JoinColumn(name=“id”)
表示用户和成员共享相同的id。您确定您的列不应该是这样的吗“成员身份证" ? 这边每个用户都有一个指向其成员的成员id。用户和成员通过两个id进行链接,但我现在可能会将其更改为用户名上的链接。我意识到我试图编写的数据库文档也已过时,并且实际使用用户名在两个表之间进行链接-是否这样做只需更改join columnm注释即可使用用户名?如果我将其更改为用户名,则会出现以下错误org.hibernate.MappingException:实体映射中的重复列:com.rest.dao.model.User column:username(应使用insert=“false”update=“false”进行映射)
我意识到我试图编写的数据库文档已经过时,实际上使用用户名在两个表之间进行链接-这是否只需要更改join columnm注释以使用用户名?如果我将其更改为用户名,则会出现以下错误org.hibernate.MappingException:实体映射中的重复列:com.rest.dao.model.User列:username(应使用insert=“false”update=“false”进行映射)
外键应为username-每次使用时,我都会收到以下错误org.hibernate.MappiNgeException:实体com.rest.dao.model.U映射中的重复列ser列:用户名(应使用insert=“false”update=“false”映射)
我猜您正在使用用户名作为联接列,这将与用户实体的用户名重复,而不是使用默认值,即成员类“username”中的属性名称,请使用另一个名称@JoinColumn(name=“member\u username”,referencedColumnName=“username”)因此连接需要在成员用户名列而不是用户上进行?否连接仍在用户实体中,如@OneToOne(cascade=CascadeType.ALL)@JoinColumn(name=“me成员(用户名),请参阅ncedColumnName=“username”)私人会员;外键应为用户名-每次使用它时,我都会出现以下错误org.hibernate.MappiNgeException:实体com.rest.dao.model.U映射中的重复列ser列:用户名(应使用insert=“false”update=“false”映射)
我猜您正在使用用户名作为联接列,这将与用户实体的用户名重复,而不是使用默认值,即成员类“username”中的属性名称,请使用另一个名称@JoinColumn(name=“member\u username”,referencedColumnName=“username”)因此连接需要在成员用户名列而不是用户上进行?否连接仍在用户实体中,如@OneToOne(cascade=CascadeType.ALL)@JoinColumn(name=“me成员(用户名),请参阅ncedColumnName=“username”)私人会员;