JPA没有将外键保存到@OneToMany关系

我将Spring和Hibernate用作JPA提供程序,并尝试获取@OneToMany(具有许多电话号码的联系人)以将外键保存在电话号码表中。从我的表单中,我得到一个Contact对象,其中有一个Phone(数字)列表。Contact可以正确持久保存(Hibernate从指定序列中获取PK)。电话(号码)列表也将保留正确的PK,但“联系人”表中没有FK。

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;

}

}

希望我掌握了以上所有相关内容,否则请通知我。

回答:

您必须自己管理Java关系。对于这种事情,您需要类似:

@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;

...

}

以上是 JPA没有将外键保存到@OneToMany关系 的全部内容, 来源链接: utcz.com/qa/418128.html

回到顶部