gpt4 book ai didi

java - JPA 未将外键保存到 @OneToMany 关系

转载 作者:IT老高 更新时间:2023-10-28 13:51:19 28 4
gpt4 key购买 nike

我正在将 Spring 与 Hibernate 一起用作 JPA 提供程序,并试图获取 @OneToMany(具有多个电话号码的联系人)以将外键保存在电话号码表中。从我的表单中,我得到一个包含电话(号码)列表的联系人对象。 Contact 得到正确持久化(Hibernate 从指定的序列中获取一个 PK)。 Phone(numbers) 列表也使用正确的 PK 保持不变,但 Contacts 表没有 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;

...
}

关于java - JPA 未将外键保存到 @OneToMany 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/814474/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com