Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cannot insert null in one to many relationship hibernate annotation

I have a class A{Set b .....} which holds references of class B as Set. It is one to many relationship. Both class have sequencer in oracle. I put cascade to all in hibernate annotations. When i save class A, it gives me error that cannot insert null B.a_id . A-id is not nullable in my database. How can i persist this relationship.

like image 506
dmay Avatar asked Sep 16 '10 07:09

dmay


2 Answers

This is a unidirectional relationship from A->B. a_id column in table B is not nullable. When hibernate tries to save class B, it not able to find value for a_id.

Well, did you try to make the JoinColumn non nullable?

@OneToMany 
@Cascade({CascadeType.ALL}) 
@JoinColumn(name="A_ID", nullable=false)
private Set<B> b;

See also

  • Hibernate Core Reference Guide
    • 6.2.1. Collection foreign keys
like image 123
Pascal Thivent Avatar answered Oct 23 '22 16:10

Pascal Thivent


I ran into the same problem and solved it by using the mappedBy attribute of the @OneToMany annotation in Class A:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "m_a")
private Set<B> b;

Here, m_a is the field in Class B that refers to Class A:

@JoinColumn(name = "aId", nullable = false)
@ManyToOne
private A m_a;

This way, the @JoinColumn is only specified in one place, no duplicated code.

like image 31
Jos Avatar answered Oct 23 '22 14:10

Jos