这是一对多的双向关系。如果我对父对象执行操作,则插入父对象但是插入的子对象没有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周开始...... ...
答案 0 :(得分:0)
这很简单。想一想这个问题:您通过SureshWives
保存SureshHusband
(例如roja
):
SureshWives s = new SureshWives();
s.setWid(11);
s.setWName("roja");
你有s.getHusband()
的值?显然是null
。因此,Hibernate将null
保存到数据库中。
附加说明
谨慎使用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;
}