加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读