休眠中的OneToMany映射。值将为空

时间:2020-04-13 09:57:18

标签: java hibernate-mapping

我有一个学生班,一个帐户班有@OneToMany关系。一个学生可以使用多个帐户。我的两个表格均已创建。我的帐户表中有一个字段Student_id,但值将为空。您能帮我做错什么吗?

    import java.util.Collection;
    import java.util.Set;

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;

    @Entity
    @Table(name = "Student_Information")
    public class Student {

        @Id
        private int id;

        @Column
        private String name;


        @OneToOne(targetEntity=Address.class , cascade = CascadeType.ALL)
        @JoinColumn(name="addressId" , referencedColumnName = "addressId")
        private Address adId;

        @OneToMany(mappedBy="student",cascade= CascadeType.ALL)
        private Collection<Account> account;


        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "STUDENT_CERTIFICATION", joinColumns = { @JoinColumn(name = "id") }, inverseJoinColumns = { @JoinColumn(name = "certId") })
        private Collection<Certification> certId;


        public Collection<Account> getAccount() {
            return account;
        }

        public void setAccount(Collection<Account> account) {
            this.account = account;
        }

        public Collection<Certification> getCertId() {
            return certId;
        }

        public void setCertId(Collection<Certification> certId) {
            this.certId = certId;
        }


        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Address getAdId() {
            return adId;
        }

        public void setAdId(Address adId) {
            this.adId = adId;
        }

    }

Account Class




import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Account")
public class Account {

    @Id
    private int accountId;


    @Column
    private String accountNumber;

    @ManyToOne
    @JoinColumn(name="id")
    private Student id;

    public Student getId() {
        return id;
    }

    public void setId(Student id) {
        this.id = id;
    }

    public int getAccountId() {
        return accountId;
    }

    public void setAccountId(int accountId) {
        this.accountId = accountId;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }


}

我有一个学生班,一个帐户班有@OneToMany关系。一个学生可以使用多个帐户。我的两个表格均已创建。我的帐户表中有一个字段Student_id,但值将为空。您能帮我做错什么吗?

4 个答案:

答案 0 :(得分:1)

我认为问题是因为连接列注释中的名称,此名称应与表中列的实际名称匹配,在这种情况下,正如您所说的student_id

@ManyToOne
@JoinColumn(name="student_id")
private Student id;

答案 1 :(得分:0)

@OneToMany(mappedBy="student")不正确。

应该为@OneToMany(mappedBy="id")

答案 2 :(得分:0)

尝试一下,将以下代码放在“学生”类中:

    @OneToMany(cascade= CascadeType.ALL, mappedBy="student",)
    private Collection<Account> account;

并将此行放在“帐户”下面

    @ManyToOne()
    @JoinColumn(name = "account_id", columnDefinition = "BigInt")
    private Student student;

祝你好运...

答案 3 :(得分:0)

UPDATE实体中学生的@Entity public class Troop { @OneToMany @JoinColumn(name="troop_fk") //we need to duplicate the physical information public Set<Soldier> getSoldiers() { ... } @Entity public class Soldier { @ManyToOne @JoinColumn(name="troop_fk", insertable=false, updatable=false) public Troop getTroop() { ... } 不是必需的,您只应为一个帐户拥有id,例如:

Account

,然后在id实体中用// Account class: @Id private int account_id; //should not be named 'id' 注释将其加入:

@OneToMany