Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过Hibernate插入多个表_Java_Spring_Hibernate - Fatal编程技术网

Java 如何通过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

我需要在Hibernate中插入两个表——我有一个用户,每个用户所属的都是一个成员。因此,在创建新用户时,我需要在成员表中添加一个新条目。我试图通过创建一个映射到我的成员表的成员对象,然后将其作为映射到用户表的用户对象中的字段来实现这一点

@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.Mappi‌​NgeException:实体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=“usern‌​ame”)私人会员;外键应为用户名-每次使用它时,我都会出现以下错误
org.hibernate.Mappi‌​NgeException:实体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=“usern‌​ame”)私人会员;