猿问

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

用户.java


package 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;

    }

海绵宝宝撒
浏览 210回答 2
2回答

慕雪6442864

您似乎正在尝试对两个双向关系进行建模:User<->UserCredentials和:User<->&nbsp;UserAddress。但是您真正在创建以下四种关系:User&nbsp;->&nbsp;UserCredentialsUser&nbsp;<-&nbsp;UserCredentialsUser&nbsp;->&nbsp;UserAddressUser&nbsp;<-&nbsp;UserAddress为了解决这个问题,您需要使用mappedBy.&nbsp;

狐的传说

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

相关分类

Java
我要回答