为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决spring boot插入数据时外键一直为零的问题?

如何解决spring boot插入数据时外键一直为零的问题?

海绵宝宝撒 2021-09-15 10:42:43
用户.javapackage com.spring.demo.model;import java.util.Date;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.Lob;import javax.persistence.OneToOne;import javax.persistence.Table;import javax.persistence.Transient;@Entity@Table(name="user")public class User {    @Id    @GeneratedValue(strategy=GenerationType.IDENTITY)    @Column(name="user_id")    private int id;    private String fName;    private String lName;    @Column(unique=true,nullable=true)    private String email;    @Column(unique=true,nullable=true)    private long mobile;    private Date dob;    @Lob    private byte[] image;       @Transient    private String base64Image;    @OneToOne(cascade=CascadeType.ALL,fetch =FetchType.EAGER)    @JoinColumn(name="userCredential_id")    private UserCredential userCredential;    @OneToOne(cascade=CascadeType.ALL,fetch =FetchType.EAGER)    @JoinColumn(name="add_id")    private Address address;    public Address getAddress() {        return address;    }    public void setAddress(Address address) {        this.address = address;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getfName() {        return fName;    }    public void setfName(String fName) {        this.fName = fName;    }    public String getlName() {        return lName;    }    public void setlName(String lName) {        this.lName = lName;    }    public String getEmail() {        return email;    }    public void setEmail(String email) {        this.email = email;    }    public long getMobile() {        return mobile;    }    public void setMobile(long mobile) {        this.mobile = mobile;    }    public Date getDob() {        return dob;    }
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您似乎正在尝试对两个双向关系进行建模:

User<->UserCredentials和:

User<-> UserAddress

但是您真正在创建以下四种关系:

User -> UserCredentials

User <- UserCredentials

User -> UserAddress

User <- UserAddress

为了解决这个问题,您需要使用mappedBy


查看完整回答
反对 回复 2021-09-15
?
狐的传说

TA贡献1804条经验 获得超3个赞

问题在于反向引用。Hibernate 无法为您维护这一点。假设您保存了用户对象。它创建一个凭证行并生成 id。它创建地址和 ID。它更新用户对象上的 cred_id 和 add_id,然后为其创建一行并生成 id 并返回该值。此时您需要将您的用户对象添加到凭证和地址并再次保存。


查看完整回答
反对 回复 2021-09-15
  • 2 回答
  • 0 关注
  • 209 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信