Hibernate关联保存

2025-05-15 18:50:45
推荐回答(3个)
回答1:

30 分啊 拼了
全是心血啊
·················
首先,你的inverse应该等于true吧.
inverse=true表示不关联,即不维护关系。
在一对多中,一般建议采用一的一方关联关系。
有助于提高效率。
在一的一方加上 cascade=“all/save-update”
一般无特殊需求设置为save-update就ok了
这样设置过后,就会自动关联保存了

你的异常是
非空属性指向一个空值或transient属性。
排除transient,就是说你的student有一个属性是空的,而你的表约束中这个属性确实要求非空。

回答你的问题:

1:不是hibernate在new的时候给对象oid值赋予null的
这是你new对象时没有给oid属性赋值,自动初始化为null的
而在映射文件中id的unsaved—value=null
这里的意思是指如果这个对象的id值在程序中指定为null,那么就为它获取一个Id值,若不等于null,就不获取id值,保持原来不变。当然你也可以unsaved-value为其他值。
并不是说你把这设置为2,你new一个对象时,他的oid值就为2了。
2
hibernate会自动保存关联对象,只有你在映射文件中指定了。
你的应该是映射文件的问题。。

回答2:

你要给每个book对象来个setStudent(Student stu)

回答3:

你可以设置属性 cascade=“all” 保存,更新,删除时都级联就行了,或着你手动set 楼上说的给每个book对象来个setStudent(Student stu)