A. *_*ips 7 java hibernate jpa
我想将一个具体的超类更改为其子类之一.我在下面列举了一个例子:
@Entity
@Table(name = "employees")
@Inheritance(strategy = InheritanceType.JOINED)
public class Employee {
@Id
@Column(name = "id")
private String id;
public Employee( String id ) {
this.id = id;
}
...
}
@Entity
@Table(name = "managers")
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
public class Manager extends Employee {
public Manager( String id ) {
super(id);
}
...
}
@Entity
@Table(name = "history")
public class History {
...
/**
*
*/
@ManyToOne
@JoinColumn(name = "employee_id")
private Employee employee;
...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的三个班级是员工,经理和历史.所有经理都是员工,但并非所有员工都是经理.所有员工(和经理)都有历史记录.员工可能会晋升为管理层.发生这种情况时,应通过保持员工ID相同来保留员工的历史记录.这样可以轻松找到经理人的就业历史.
由于数据库受到限制,实施促销操作变得复杂:数据库不允许删除旧的Employee并创建具有相同ID的新Manager,而不通过级联操作删除所有History对象 - 人力资源部门不允许这样做,否则我的工作很简单!
是否可以在不诉诸自定义SQL操作的情况下将 Manager(新管理器)行添加或附加到现有Employee?
我尝试了以下解决方案但没有成功:
public void promote( Employee employee ) {
/* copy over the ID of the employee to the manager. Will not work because employee with ID already exists */
Manager manager = new Manager(employee.getId());
this.entityManager.persist( manager );
}
Run Code Online (Sandbox Code Playgroud)
... 要么 ...
public void promote( Employee employee ) {
/* detach the employee then merge. Will not work: fails, again, with a NonUniqueObject Exception */
this.entityManager.detach( employee );
Manager manager = new Manager(employee.getId());
this.entityManager.merge( manager );
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?我甚至在使用detach()和merge()的正确轨道上?
这可能在Hibernate/JPA中吗?
在这一点上任何想法都会有所帮助,因为我很难过!
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |