jpa-2.0 – JPA级联持续 – 多对一

前端之家收集整理的这篇文章主要介绍了jpa-2.0 – JPA级联持续 – 多对一前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一对一的关系,我正在努力坚持一个子实体.
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);

猜你在找的Java相关文章