双向多对一映射(增/删/改)
tGroup
public class tGroup implements Serializable{
private Long id;
private String name;
private Set uses = new HashSet();
//省略GET/SET
}
tUser
public class tUser implements Serializable{
private Long id;
private String name;
private tGroup tgr
//省略GET/SET
}
tGroup.hbm.xml
<hibernate-mapping>
<class name="com.hibtest2.entity.tGroup" table="t_group">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">seq_emp</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="50"></column>
</property>
<set name="uses" lazy="false" cascade="all">
<key column="group_Id"></key>
<one-to-many class="com.hibtest2.entity.tUser"/>
</set>
</class>
</hibernate-mapping>
tUser.hbm.xml
<hibernate-mapping>
<class name="com.hibtest2.entity.tUser" table="t_user">
<id name="id" type="java.lang.Long">
<column name="ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">seq_emp</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="50"></column>
</property>
<many-to-one name="tgr" column="group_Id" class="com.hibtest2.entity.tGroup" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
test1新增
session = sf.openSession();
session.beginTransaction();
tGroup tg = new tGroup();
tg.setName("C++");
Set<tUser> set = new HashSet<tUser>();
for(int i = 0;i < 2;i++){
tUser tu = new tUser();
tu.setName("a"+i);
tu.setTgr(tg);
set.add(tu);
}
tg.setUses(set);
session.save(tg);
session.getTransaction().commit();
session.close();
删除( 从一方删除 )
<many-to-one name="tgr" column="group_Id" class="com.hibtest2.entity.tGroup"cascade="save-update"></many-to-one>
tUser tu = (tUser) session.get(tUser.class, Long.parseLong("46"));
session.delete(tu);
删除( 从多方删除 )
<set name="uses" lazy="false" cascade="all">
<key column="group_Id"></key>
<one-to-many class="com.hibtest2.entity.tUser"/>
</set>
tGroup tg = (tGroup) session.get(tGroup.class, Long.parseLong("45"));
session.delete(tg);
改
session = sf.openSession();
session.beginTransaction();
tUser tu = (tUser) session.get(tUser.class, Long.parseLong("50"));
tGroup tg1 = (tGroup) session.get(tGroup.class, Long.parseLong("48"));
tGroup tg2 = (tGroup) session.get(tGroup.class, Long.parseLong("51"));
tg1.getUses().remove(tu);
tg2.getUses().add(tu);
tu.setTgr(tg2);
session.update(tu);
session.getTransaction().commit();
session.close();