jpa-2.0 – JPA级联持续 – 多对一
发布时间:2020-12-14 05:55:17 所属栏目:Java 来源:网络整理
导读:我有一对一的关系,我正在努力坚持一个子实体. public class Office{public int id;public int grades;@OneToManypublic setEmployee employees;}public class Employee{@GeneratedValue(strategy=GeneratedValue.identity)public int empid;@ManyToOne(casca
我有一对一的关系,我正在努力坚持一个子实体.
public class Office { public int id; public int grades; @OneToMany public set<Employee> employees; } public class Employee{ @GeneratedValue(strategy=GeneratedValue.identity) public int empid; @ManyToOne(cascade=cascadeType.ALL) public Office office; } Office ID已存在于数据库中.但员工不是. 当我进行以下操作时,成绩没有得到保存 Office office = new Office(); office.setId(23); office.setGrades(5); employee.setOffice(office); em.persist(employee); 如何在一个操作中将成绩保存到办公桌上 解决方法
首先,修复你的映射.
该关联是双向的,并且侧面(一侧)中的一个必须使用mappedBy属性标记为另一方的倒数: @OneToMany(mappedBy = "office") public set<Employee> employees; 员工只是办公室的员工之一.删除单个员工时,是否真的要删除整个办公室?如果没有,为什么在@ManyToOne上放一个cascade = cascadeType.ALL?这些注释有后果.不要在没有理解的情况下使用它们. 现在真的回答这个问题.如果办公室已经存在于数据库中,那么你不应该建立一个新的.从数据库中取出并更新它: Office office = em.find(Office.class,23); // office is now attached,and any change you make on the entity will be written to the database office.setGrade(5); 现在你也可以把办公室附在新员工身上.但是由于它是双向关系,您还应该初始化关联的另一面,以保持对象图相一致: employee.setOffice(office); office.addEmployee(employee); em.persist(employee); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |