读书人

Hibernate多对多级联(当中表)添加

发布时间: 2012-11-08 08:48:12 作者: rapoo

Hibernate多对多级联(中间表)添加
Hibernate多对多级联(中间表)添加

SysJuese.java和SysBumen.java是多对多关系。主动权在SysBumen.java,数据库中表结果如下:
sys_bumen结构--
id bumenmingcheng miaoshu zhuangtai

sys_juese结构--
id juesemingcheng miaoshu zhuangtai


中间表sys_bumenjuese结构--
bumen_id juese_id

目前sys_bumen中有一条记录--

1 采购部 。。。 0

现在想对sys_juese添加一条记录,同时在中间表sys_bumenjuese中也添加一条记录



==============================我是华丽的分割线=============================



代码如下:

SysBumen.java

package com.scm.domain;


import java.util.HashSet;
import java.util.Set;




/**
* SysBumen entity.
*
* @author MyEclipse Persistence Tools
*/


public class SysBumen implements java.io.Serializable {


// Fields


private Integer id;
private String bumenmingcheng;
private String miaoshu;
private Integer zhuangtai;
private Set sysYuangongs = new HashSet(0);
private Set sysJueses = new HashSet(0);


// Constructors


/** default constructor */
public SysBumen() {
}


/** minimal constructor */
public SysBumen(String bumenmingcheng) {
this.bumenmingcheng = bumenmingcheng;
}


/** full constructor */
public SysBumen(String bumenmingcheng, String miaoshu, Integer zhuangtai,
Set sysYuangongs, Set sysJueses) {
this.bumenmingcheng = bumenmingcheng;
this.miaoshu = miaoshu;
this.zhuangtai = zhuangtai;
this.sysYuangongs = sysYuangongs;
this.sysJueses = sysJueses;
}


// Property accessors


public Integer getId() {
return this.id;
}


public void setId(Integer id) {
this.id = id;
}


public String getBumenmingcheng() {
return this.bumenmingcheng;
}


public void setBumenmingcheng(String bumenmingcheng) {
this.bumenmingcheng = bumenmingcheng;
}


public String getMiaoshu() {
return this.miaoshu;
}


public void setMiaoshu(String miaoshu) {
this.miaoshu = miaoshu;
}


public Integer getZhuangtai() {
return this.zhuangtai;
}


public void setZhuangtai(Integer zhuangtai) {
this.zhuangtai = zhuangtai;
}


public Set getSysYuangongs() {
return this.sysYuangongs;
}


public void setSysYuangongs(Set sysYuangongs) {
this.sysYuangongs = sysYuangongs;
}


public Set getSysJueses() {
return this.sysJueses;
}


public void setSysJueses(Set sysJueses) {
this.sysJueses = sysJueses;
}
}

SysBumen.hbm.xml

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.scm.domain.SysBumen" table="sys_bumen" catalog="scm" lazy="false">

<id name="id" type="java.lang.Integer">

<column name="id" />

<generator />

</id>
<property name="bumenmingcheng" type="java.lang.String">

<column name="bumenmingcheng" length="50" not-null="true" />

</property>
<property name="miaoshu" type="java.lang.String">

<column name="miaoshu" length="1000" />

</property>
<property name="zhuangtai" type="java.lang.Integer">

<column name="zhuangtai" />

</property>
<set name="sysYuangongs" inverse="true">

<key>
<column name="sys_id" />

</key>
<one-to-many />

</set>

<!-- 关键是这里的inverse需要设成false,cascade设成关联的级别 -->

<set name="sysJueses" inverse="false" table="sys_bumenjuese" catalog="scm" lazy="false" cascade="save-update,delete">

<key>
<column name="bumen_id" not-null="true" />

</key>
<many-to-many entity-name="com.scm.domain.SysJuese">

<column name="sys_id" not-null="true" />

</many-to-many>
</set>
</class>
</hibernate-mapping>






SysJuese.java

package com.scm.domain;


import java.util.HashSet;
import java.util.Set;


/**
* SysJuese entity.
*
* @author MyEclipse Persistence Tools
*/


public class SysJuese implements java.io.Serializable {


// Fields


private Integer id;
private String juesemingcheng;
private String miaoshu;
private Integer zhuangtai;
private Set sysBumens = new HashSet(0);
private Set sysYonghus = new HashSet(0);
private Set sysQuanxians = new HashSet(0);


// Constructors


/** default constructor */
public SysJuese() {
}


/** minimal constructor */
public SysJuese(String juesemingcheng) {
this.juesemingcheng = juesemingcheng;
}


/** full constructor */
public SysJuese(String juesemingcheng, String miaoshu, Integer zhuangtai,
Set sysBumens, Set sysYonghus, Set sysQuanxians) {
this.juesemingcheng = juesemingcheng;
this.miaoshu = miaoshu;
this.zhuangtai = zhuangtai;
this.sysBumens = sysBumens;
this.sysYonghus = sysYonghus;
this.sysQuanxians = sysQuanxians;
}


// Property accessors


public Integer getId() {
return this.id;
}


public void setId(Integer id) {
this.id = id;
}


public String getJuesemingcheng() {
return this.juesemingcheng;
}


public void setJuesemingcheng(String juesemingcheng) {
this.juesemingcheng = juesemingcheng;
}


public String getMiaoshu() {
return this.miaoshu;
}


public void setMiaoshu(String miaoshu) {
this.miaoshu = miaoshu;
}


public Integer getZhuangtai() {
return this.zhuangtai;
}


public void setZhuangtai(Integer zhuangtai) {
this.zhuangtai = zhuangtai;
}


public Set getSysBumens() {
return this.sysBumens;
}


public void setSysBumens(Set sysBumens) {
this.sysBumens = sysBumens;
}


public Set getSysYonghus() {
return this.sysYonghus;
}


public void setSysYonghus(Set sysYonghus) {
this.sysYonghus = sysYonghus;
}


public Set getSysQuanxians() {
return this.sysQuanxians;
}


public void setSysQuanxians(Set sysQuanxians) {
this.sysQuanxians = sysQuanxians;
}


}



SysJuese.hbm.xml

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.scm.domain.SysJuese" table="sys_juese" catalog="scm">

<id name="id" type="java.lang.Integer">

<column name="id" />

<generator />

</id>
<property name="juesemingcheng" type="java.lang.String">

<column name="juesemingcheng" length="50" not-null="true" />

</property>
<property name="miaoshu" type="java.lang.String">

<column name="miaoshu" length="1000" />

</property>
<property name="zhuangtai" type="java.lang.Integer">

<column name="zhuangtai" />

</property>
<set name="sysBumens" table="sys_bumenjuese" catalog="scm" lazy="false">

<key>
<column name="sys_id" not-null="true" />

</key>
<many-to-many entity-name="com.scm.domain.SysBumen">

<column name="bumen_id" not-null="true" />

</many-to-many>
</set>
<set name="sysYonghus" inverse="true">

<key>
<column name="sys_id" />

</key>
<one-to-many />

</set>
<set name="sysQuanxians" inverse="true" table="sys_juesequanxian" catalog="scm">

<key>
<column name="jueseid" not-null="true" />

</key>
<many-to-many entity-name="com.scm.domain.SysQuanxian">

<column name="quanxianid" not-null="true" />

</many-to-many>
</set>
</class>
</hibernate-mapping>



=================================我也是华丽的分割线===================================

遇到的错误:

org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session:

在进行更新SysBumen设置Juese集合时,Juese集合每次需要new。使用Spring管理事务之后,如果更新对象中的Juese每次不新建,会出现session重复的问题。Hibernate不能同时更新两个拥有同一id的对象。
1 楼 fengzhisha0914 2011-03-30 连引用地址都不写?

读书人网 >软件架构设计

热点推荐