我有一个A类{Set b .....},它将B类的引用保存为Set。这是一对多的关系。 这两个类在oracle中都有音序器。我把cascade放在所有的hibernate注释中。当我保存类A时,它给出了我无法插入null B.a_id的错误。 A-id在我的数据库中不可为空。我怎么能坚持这种关系。
答案 0 :(得分:9)
这是来自A-> B的单向关系。表B中的a_id列不可为空。当hibernate尝试保存B类时,它无法找到a_id的值。
嗯,您是否尝试制作JoinColumn
非nullable
?
@OneToMany
@Cascade({CascadeType.ALL})
@JoinColumn(name="A_ID", nullable=false)
private Set<B> b;
答案 1 :(得分:2)
我遇到了同样的问题,并使用A类中@OneToMany注释的mappedBy属性解决了这个问题:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "m_a")
private Set<B> b;
这里,m_a是B类中引用A类的字段:
@JoinColumn(name = "aId", nullable = false)
@ManyToOne
private A m_a;
这样,@ JoinColumn只在一个地方指定,没有重复的代码。