在一对多双向子表中未插入外键(当我对父对象执行操作时)

时间:2017-10-27 10:09:36

标签: java hibernate

这是一对多的双向关系。如果我对父对象执行操作,则插入父对象但是插入的子对象没有foriegn key refference(null)

/ 父类 /

@Entity
public class SureshHusband {
    @Id
    @Column(name="HusbandId")
    private int id;
    @Column(length=10,name="HusbandName")
    private String Name;


    @OneToMany(cascade=CascadeType.ALL,mappedBy="husband")

    private Set<SureshWives> wives

// setters and getters
/**............child table .................**/

@Entity
public class SureshWives {
    @Id
    @Column(name="WifeId")

    private int wid;
    @Column(name="WifeName",length=10)
    private String WName;


     @ManyToOne(cascade=CascadeType.ALL)
     @JoinColumn(name="id_fk")

    private SureshHusband husband;
 // remaing setters and getters.

/** main class*/
  class Main{
public static void main(String args[]){
Configuration cfg=new Configuration.configure("hibernate.cfg.xml");
    SessioFactory factory=cfg. buildSessionFactory();
Session session=factory.openSession();  
        //parent class object 
    SureshHusband ss=new SureshHusband();

        //Child class object
        SureshWives s=new SureshWives();
        s.setWid(11);
        s.setWName("roja");

        SureshWives s2=new SureshWives();
        s2.setWid(12);
        s2.setWName("rani");

//Collecxtion type variable in parent class (Child class objects added to collection type)
  Set<SureshWives> s1=new HashSet<>();
        s1.add(s);
        s1.add(s2);
     // collection variable added to parent object
        ss.setWives(s1);
         ss.setId(102);
    ss.setName("suresh");
        Transaction tx=session.beginTransaction();
// operation perform an parent object.
       session.save(ss);
        tx.commit();
        session.close();

/ **     这里如果我对插入对象的父对象执行操作。  但是null值被称为子表中的foriegn键,为什么foriegn被插入子表中。在数据库中插入父对象但是在子表中Foriegn键被插入为&#34; null&#34; ** /       请帮助我,我从1周开始...... ...

1 个答案:

答案 0 :(得分:0)

这很简单。想一想这个问题:您通过SureshWives保存SureshHusband(例如roja):

SureshWives s = new SureshWives();
s.setWid(11);
s.setWName("roja");

你有s.getHusband()的值?显然是null。因此,Hibernate将null保存到数据库中。

附加说明

  1. 请勿使用复数名称。
  2. 谨慎使用cascade = CascadeType.ALL。丈夫是妻子的主人。对?那么为什么在保存任何妻子时应该改变丈夫呢?你可以不小心改变丈夫,并与任何妻子一起保存。这不是理想的行为。即使你有双向关系,你也应该有一个关系的所有者 - 丈夫!

    @Entity 公共课SureshWive {

    @Id
    @Column(name="WifeId")
    private int wid;
    
    @Column(name="WifeName",length=10)
    private String WName;
    
    @ManyToOne
    @JoinColumn(name="id_fk")
    private SureshHusband husband;
    

    }