`
zhaoshijie
  • 浏览: 2261859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 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的对象。
分享到:
评论
1 楼 fengzhisha0914 2011-03-30  
连引用地址都不写?

相关推荐

    hibernate 多表关联 中间表

    通过以上步骤,我们就能在Hibernate中有效地管理多对多关联,并利用中间表实现复杂的数据操作。理解并熟练掌握这些知识,对于任何Java开发人员来说都是非常有价值的,特别是在大型企业级应用中,这种关联映射的使用...

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。

    Hibernate 一对多、多对一、级联、加载、反转

    在Java持久化框架Hibernate中,一对多(One-to-Many)、多对一(Many-to-One)、级联(Cascading)、加载(Loading)和反转(Inversing)是关系映射的重要概念,它们对于理解如何在数据库和对象之间有效地管理关联至...

    Hibernate-基础联表模板

    "Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...

    hibernate多对多

    总结,Hibernate的多对多关系映射是数据库设计中非常重要的一个部分,它简化了Java对象与数据库表之间的交互。通过理解并实践案例,我们可以更深入地掌握这一特性,提高开发效率。在实际项目中,根据业务需求,合理...

    Hibernate多对多关联添加及查询示例

    在上述代码中,`@ManyToMany`注解定义了多对多关联,`@JoinTable`指定了中间表的名称和连接列。`mappedBy`属性用于指定另一端的关联字段,这表示`Course`实体的`students`集合是由`Student`实体的`courses`集合维护...

    Hibernate(多对多表操作)

    在Hibernate中,实现多对多关系需要通过关联表(也称为中间表或连接表)来完成。这个关联表通常包含两个外键,分别对应于两个参与关系的实体。以下是一个具体的步骤详解: 1. **定义实体类**:首先,为参与多对多...

    hibernate 多对多源代码

    默认情况下,Hibernate会自动创建中间表,但我们可以通过`@JoinTable`来自定义中间表的结构,添加额外的列或者指定不同的表名。例如,可以添加一个表示选课时间的字段。 四、关联的维护 在多对多关系中,关联的维护...

    hibernate 级联(cascade和inverse)一对多

    总结,Hibernate的级联和反转特性对于一对多关系的管理至关重要,它们可以简化开发过程,提高数据操作的效率。通过合理配置,可以确保对象关系的正确同步,并利用JUnit进行测试以确保功能的正确性。在实践中,应根据...

    Hibernate多对多实例+数据库代码

    通过查看代码和运行示例,开发者可以深入理解Hibernate是如何自动处理复杂的关联操作,比如通过中间表实现多对多的添加、删除和查找。 **总结** 这个"Hibernate多对多实例+数据库代码"涵盖了ORM的核心概念,特别是...

    hibernate多对多查询

    总之,Hibernate的多对多查询涉及实体类的定义、中间表的映射以及查询语句的编写。理解和熟练运用这些概念对于开发复杂的Java应用程序至关重要。在实际项目中,应根据业务需求灵活调整关联策略,确保数据的一致性和...

    Struts2+Hibernate实现一对多联表查询

    本项目利用这两个框架实现了一对多关联关系的联表查询,即部门表与员工表之间的关系。 首先,部门表可以包含多个员工,而每个员工只属于一个部门,这就是典型的一对多关系。在Hibernate中,这种关系可以通过在实体...

    Hibernate ORM - 多对多双向连接表关联关系

    6. **源码分析**:为了更好地理解这一过程,你可以查看Hibernate源码,了解它如何处理多对多关联的SQL语句生成、中间表的操作以及事务管理。这有助于提高对Hibernate框架的理解。 通过以上步骤,我们可以在...

    hibernate多对多的简单实现

    - 多对多关系通常需要一个中间表来存储两个实体的关联。在这个例子中,可能有一个名为`student_course`的中间表,包含`student_id`和`course_id`两个字段,分别引用学生和课程的主键。 4. **JPA实体(Entities)**...

    hibernate(多对多关系映射)

    在Hibernate中,多对多关系通常通过中间表来实现,这个中间表包含了两个实体的主键作为外键。你需要在实体类中定义对应的集合属性,并在对应的`@ManyToMany`注解中指定关联的实体和中间表的信息。例如: ```java ...

    Hibernate多对多数据表操作-插入

    在这个例子中,通过调用`save`方法,Hibernate会自动处理插入到中间表的操作,确保多对多关系的正确建立。 总结来说,使用Hibernate处理多对多关系,关键在于理解`@ManyToMany`注解的使用,中间实体类的设计(如果...

    hibernate多对多双向关联

    3. **中间表**:多对多关系通常需要一个中间表来存储两个表的连接。在Hibernate中,可以通过`@JoinTable`注解定义这个中间表,包括它的名字、连接两个实体的外键等信息。 4. **关联维护**:双向关联需要在两个实体...

    Hibernate多对多

    1. **添加关联**:可以通过向集合属性添加元素来建立关联,Hibernate会自动处理中间表的插入。 2. **删除关联**:同样地,删除集合中的元素会触发中间表记录的删除。 3. **查询关联**:可以通过JPQL(Java ...

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

Global site tag (gtag.js) - Google Analytics