假设我有这两个类:
class A{
B ref1 = null; //Can both be null
B ref2 = null;
}
class B{
..
}
我省略了ref1和ref2的getter和setter。当然我想添加id ...无论如何我想要的是让hibernate处理这两个引用的自动持久性......以及自动删除B对象。我想在A和B的每个属性ref *之间使用一对一但是我迷路了:)你能给出建议吗?我想使用SchemaExport。
谢谢。
答案 0 :(得分:1)
您可以使用OneToOne-Annotation的Cascade属性来实现此行为。所以使用Hibernate Annotations / JPA Annotations你会有类似的东西:
@Entity
public class AClass{
@Id
@GeneratedValue
private long id;
@OneToOne(cascade={Cascade.ALL, Cascade.DELETE_ORPHANS})
private BClass b_1;
@OneToOne(cascade={Cascade.ALL, Cascade.DELETE_ORPHANS})
private BClass b_2;
}
@Entity
public class BClass{
private String someField;
}
在XML映射中,关联应该如下所示:
<hibernate-mapping>
<class name="AClass">
<one-to-one cascade="all,delete-orphans" name="b_1" class="BClass" />
<one-to-one cascade="all,delete-orphans" name="b_2" class="BClass" />
</class>
</hibernate-mapping>
这应该在级联持久性操作中为您提供所需的行为,并从持久层中删除任何未引用的BClass对象。
玩得开心!
谢
答案 1 :(得分:0)
您有@OneToMany关系。但是由于没有@OneToTwo关系,你必须使ORM适应你的模型。
<hibernate-mapping>
<class name="ClassAa">
<list name="classBbList">
<key column="CLASS_AA_ID" not-null="true"/>
<list-index column="CLASS_BB_INDEX"/>
<one-to-many class="ClassBb"/>
</list>
</class>
<hibernate-mapping>
现在你的ClassAa看起来像
public class ClassAa {
private ClassBb classBb1;
private ClassBb classBb2;
private List<ClassBb> classBbList = new ArrayList<ClassBb>();
public void setClassBb1(ClassBb classBb1) {
// You can use index 0 to store your classBb1
if(getClassBbList().size == 0)
getClassBbList().add(classBb1);
else
getClassBbList().set(0, classBb1);
}
public ClassBb getClassBb1() {
if(getClassBbList().size() == 0)
return null;
return getClassBbList().get(0);
}
public void setClassBb2(ClassBb classBb2) {
// You can use index 1 to store your classBb2
switch(getClassBbList().size()) {
case 0:
getClassBbList().add(null);
getClassBbList().add(classBb2);
break;
case 1:
getClassBbList().add(classBb2);
break;
case 2:
getClassBbList().set(1, classBb2);
break;
}
}
public ClassBb getClassBb2() {
if(getClassBbList().size() < 2)
return null;
return getClassBbList().get(1);
}
public List<ClassBb> getClassBbList() {
return this.classBbList;
}
public void setClasBbList(List<ClassBb> classBbList) {
this.classBbList = classBbList;
}
}
的问候,