先描述一下(全是拼音)--------
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 class="native" />

        </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 class="com.scm.domain.SysYuangong" />

        </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 class="native" />

        </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 class="com.scm.domain.SysYonghu" />

        </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的对象。