【发布时间】:2014-09-02 03:12:10
【问题描述】:
我需要使用 JPA/Hibernate 在两个实体之间建立关系:Child 和 Father,它们都扩展了实体 User。一个父亲可以没有孩子,每个孩子都必须有一个父亲。我可以毫无问题地插入一个父亲,但不能添加一个属于我之前插入的父亲的孩子。这是我添加孩子的方法:
SelectStatement ss = new SelectStatement();
ss.manager.clear();
Father father = ss.getFather(socialId);
Child child = new Child();
//Set some parameters
dependente.setFather(father);
titular.addChild(child);
ss.manager.refresh(titular);
ss.manager.persist(dependente);
ss.manager.getTransaction().begin();
try{
ss.manager.getTransaction().commit();
ss.close();
return true;
}
catch(RollbackException e){
ss.close();
return false;
}
班级用户:
@Entity
@Inheritance ( strategy = InheritanceType.JOINED )
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int pk_user;
@Column
private String name;
}
班主任:
@Entity
public class Father extends User{
@OneToMany(mappedBy="father")
@LazyCollection(LazyCollectionOption.FALSE)
private Collection <Child> childs;
@Column(nullable=true, unique=true)
private String social_id;
public void addChild(Child child){
this.childs.add(child);
}
}
类子:
@Entity
public class Child extends User{
//Here is the problem!
@ManyToOne(optional = false)
@JoinColumn(name = "pk_user")
private Father father;
}
PS:为了清楚起见,我已经删除/更改了一些属性,所以不要担心不存在的 get/set 方法等。
以下代码产生错误“应使用可插入 = 假,可更新 = 假”。如果我确实使用,我会收到错误“无法添加或更新子行”。
我可以删除 User 类并将其所有属性复制到父亲和孩子,为这个问题创建一个解决方案。但是我真正的父/子/用户类足够复杂,可以避免这样做。
谢谢。
【问题讨论】: