hibernate 中如何处理composite identif 的对象

newpaul 03-08-12

问题描述
父类对象 pt
子类对象复合关键字 child1,child2

1
如何载入一个带有复合关键字的对象
session.load(child1.class,XXX) 这里的XXX是否应该是
<composite-id name="child_id" class="childPK">
</composite-id>
这里的childPK

2
如何用cascading update() 来更新带有复合关键字的子类对象

我设置cascade="all"

parent pt=(parent)session.load(.............)

//update child1
child child1=(child)parent.getchilds().iterator.next();
child1.setname(XXXXX);

// add child2
child child2=new child();
parent.getchilds().add(child2);
child2.setparent(pt);

session.update(pt);

但实际上 并没有更新child1 和添加child2.如果不是复合关键字便可以
如何处理呢?

谢谢

blackwhites
2003-08-12 13:36

把复合主建做为1个类处理

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.test.Testcomposit" table="test">
<composite-id class="com.test.Testcompositkey" name="id">
<key-property column="id" length="20" name="id" type="java.lang.Long"/>
<key-property column="demo" length="2" name="demo" type="java.lang.String"/>
</composite-id>
<property column="sex" length="11" name="sex" type="java.lang.Integer"/>
</class>
</hibernate-mapping>
public class Testcompositkey implements Serializable{
private long id;
private String demo;
public Testcompositkey() {
}
public Testcompositkey(long id,String demo){
this.id = id;
this.demo = demo;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDemo() {
return demo;
}
public void setDemo(String demo) {
this.demo = demo;
}

}

public class Testcomposit implements Serializable {
private int sex;
private Testcompositkey id;

public Testcomposit() {
}

public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public Testcompositkey getId() {
return id;
}
public void setId(Testcompositkey id) {
this.id = id;
}

}

newpaul
2003-08-12 13:51

对 复合主建使用一个类处理了
但使用Cascades=all更新父类的时候,子类也更新了,但对于符合主建 我在父类添加一个新的子类 在调用update(parent)的时候 新添加的子类并没有插入到数据库中 ,我看文档上写的是 只能用save()子类对象才可以

是不是这样的阿