私はJPAプロバイダとしてHibernateと共にSpringを使用しており、電話番号テーブルに外部キーを保存する@OneToMany(多数の電話番号を持つ連絡先)を取得しようとしています。私のフォームから私はそれに電話番号のリストを持っている連絡先オブジェクトを取得します。 Contactは適切に永続化されます(Hibernateは指定されたシーケンスからPKをフェッチします)。 Phone(番号)のリストも正しいPKで永続化されますが、連絡先テーブルにはFKはありません。JPOは@OneToMany関係に外部キーを保存しません
public class Contact implements Serializable {
@OneToMany(mappedBy = "contactId", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private List<Phone> phoneList;
}
public class Phone implements Serializable {
@JoinColumn(name = "contact_id", referencedColumnName = "contact_id")
@ManyToOne
private Contact contactId;
}
@Repository("contactDao")
@Transactional(readOnly = true)
public class ContactDaoImpl implements ContactDao {
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void save(Contact c) {
em.persist(c);
em.flush();
}
}
@Controller
public class ContactController {
@RequestMapping(value = "/contact/new", method = RequestMethod.POST)
public ModelAndView newContact(Contact c) {
ModelAndView mv = new ModelAndView("contactForm");
contactDao.save(c);
mv.addObject("contact", c);
return mv;
}
}
上記の関連するビットをすべて取得したらうまくいけば、私に知らせてください。
おかげで同様の
は、それを解決しました。 –
'addPhone'メソッドは正しいですか?ヌルチェックが間違った場所にあるように見えます。 –
phone.setContact(this) - これはメモリリークですか?か否か? –