【发布时间】:2016-07-11 15:57:15
【问题描述】:
如何在数据库中为包含相同对象的两个实体存储相同的表行? 以下说明了我的无效尝试。
@Entity
public class Employee
{
@ManyToOne(cascade=CascadeType.ALL)
private Department department;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
...
<Getters and setters for all members here>
...
}
@Entity
public class Department
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
@OneToMany(mappedBy="department")
private Collection<Employee> employees;
...
<Getters and setters for all members here>
...
}
在 Servlet 中,我尝试以下操作:
Department department=new Department();
department.setName("HR");
Employee employee1=new Employee();
employee1.setName("Bob");
employee1.setDepartment(department);
Employee employee2=new Employee();
employee2.setName("Anna");
employee2.setDepartment(department);
...
em.persist(employee1);
em.persist(employee2);
当我这样做时,当employee2 被持久化时,我得到一个错误,即部门的主键已经在数据库中,因为它试图第二次添加同一个部门。
如何实现两个员工都指向数据库中的同一行。
我是否必须通过将员工添加到部门来实现这一目标?
我觉得我在这里缺少一些基本的东西。
【问题讨论】:
-
具体是什么异常,贴出来
-
我没有看到 Employee 对象被添加到 Department.employees。
-
缺少从外观上查看 JPA 提供程序的日志...
标签: java database jpa duplicates inverse