JPA not saving foreign key to @OneToMany relation
If the Contact-Phone relationship is unidirectional, you can also replace mappedBy
in @OneToMany
annotation with @JoinColumn(name = "contact_id")
.
@Entity
public class Contact {
@Id
private Long id;
@OneToMany(cascade = CascadeType.PERSIST)
@JoinColumn(name = "contact_id")
private List<Phone> phoneNumbers;
// normal getter/setter
...
}
@Entity
public class PhoneNumber {
@Id
private Long id;
...
}
Similar in JPA @OneToMany -> Parent - Child Reference (Foreign Key)
In reply to Cletus' answer. I would say that it's important to have the @column
annotation on the id fields, as well as all the sequence stuff. An alternative to using the mappedBy parameter of the @OneToMany
annotation is to use the @JoinColumn
annotation.
As a kinda aside your implementation of addPhone needs looking at. It should probably be something like.
public void addPhone(PhoneNumber phone) {
if (phone == null) {
return;
} else {
if (phoneNumbers == null) {
phoneNumbers = new ArrayList<Phone>();
}
phoneNumbers.add(phone);
phone.setContact(this);
}
}
You have to manage the Java relationships yourself. For this kind of thing you need something like:
@Entity
public class Contact {
@Id
private Long id;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "contact")
private List<Phone> phoneNumbers;
public void addPhone(PhoneNumber phone) {
if (phone != null) {
if (phoneNumbers == null) {
phoneNumbers = new ArrayList<Phone>();
}
phoneNumbers.add(phone);
phone.setContact(this);
}
}
...
}
@Entity
public class Phone {
@Id
private Long id;
@ManyToOne
private Contact contact;
...
}