`
zhuyuangping
  • 浏览: 39275 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

hibernate 多对 多,操作中间表

 
阅读更多
利用hibernate解决多对多的问题

1建立实体多对多关系Manytomany,利用hibernate去维护多对多关系,但是hibernate无提供中间表操作。
2在1的基础上,建立中间表,利用一对多关系。

这样可以在中间表添加其他属性,也可以利用hibernate多对多去维护

EG:
学生:ID,name
学科:ID,classname

中间表:sid,cid,SCORE

hibernate: @MANYTOMANY Student,Class_tb

@ManyToOne score ,



eg2:用户,会议多对多关系,中间表记录参加会议的信息

会议
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="djsys_netmeeting"
name="com.gdass.model.djsys.NetMeeting">
<id name="id">
<generator class="native" />
</id>
<property name="dyId" />
<property name="createName" />
<property name="orgid" />
<property name="orgname" />
<property name="title" />
<property name="startDate" />
<property name="endDate" />
<property name="flag" />
<property name="moderator" />
<property name="content" />
<property name="learndata" />
<property name="xmldatapath" />
<property name="toupiao" />
<property name="tpcon" />
<property name="determine" />
<property name="onlinedatapath" />
<property name="chengdu" />
<property name="attachment" />
<property name="seldomtime" />
<property name="noticedata" />
<!--
<map name="dangYuans" table="djsys_user_netmeet" >
<key column="nmid" not-null="true" />
<map-key-many-to-many column="dyid"
class="com.gdass.model.djsys.DangYuan" />
<composite-element
class="com.gdass.model.djsys.UserNetMeet">
<property name="looker_ornot" column="looker_ornot" />
<property name="flag" column="flag" />
</composite-element>
</map> -->
   <set table="djsys_user_netmeet" fetch="select" name="dangYuans">
      <key column="nmid"/>
      <many-to-many column="dyid" class="com.gdass.model.djsys.DangYuan"/>
    </set>

    <set name="userNetMeets" inverse="true"
cascade="all-delete-orphan">
<key column="nmid" />
<one-to-many class="com.gdass.model.djsys.UserNetMeet" />
</set>
<set name="voteTopics" inverse="true"
cascade="all-delete-orphan">
<key column="nmid" />
<one-to-many class="com.gdass.model.djsys.VoteTopic" />
</set>
</class>
</hibernate-mapping>

用户

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="djsys_dangyuan"
name="com.gdass.model.djsys.DangYuan">
<id name="id">
<generator class="native" />
</id>
<many-to-one name="user" column="uid" />
<many-to-one name="djorg" column="orgid" />
<property name="dangfei" />
<property name="changedate" />
<property name="username" />
<property name="rdsqdate" />
<property name="jjfzdate" />
<property name="fzdxdate" />
<property name="rdlxr" />
<set name="dyOrgs" inverse="true" cascade="all-delete-orphan">
<key column="dangYuanId" />
<one-to-many class="com.gdass.model.djsys.DyOrg" />
</set>
<set name="personAwards" inverse="true"
cascade="all-delete-orphan">
<key column="dangYuanId" />
<one-to-many class="com.gdass.model.djsys.PersonAward" />
</set>
<!--
<map name="netMeetings" table="djsys_user_netmeet">
<key column="dyid" not-null="true" />
<map-key-many-to-many column="nmid"
class="com.gdass.model.djsys.NetMeeting" />
<composite-element
class="com.gdass.model.djsys.UserNetMeet">
<property name="looker_ornot" column="looker_ornot" />
<property name="flag" column="flag" />
</composite-element>
</map> -->
    <set table="djsys_user_netmeet" fetch="select" lazy="true" name="netMeetings">
      <key column="dyid"/>
      <many-to-many column="nmid" class="com.gdass.model.djsys.NetMeeting"/>
    </set>

     <set table="djsys_user_netword" fetch="select" lazy="true" name="netWords">
      <key column="dyid"/>
      <many-to-many column="nwid" class="com.gdass.model.djsys.NetWord"/>
    </set>

</class>
</hibernate-mapping>

中间表,记录参加会议情况
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class table="djsys_user_netmeet"
name="com.gdass.model.djsys.UserNetMeet">
<composite-id>
       <key-many-to-one name="netMeeting" class="com.gdass.model.djsys.NetMeeting" column="nmid">            
         </key-many-to-one>  
      <key-property name="dyid" />
    </composite-id>

<property name="vdata" />
<property name="sdata" />
<property name="id" />
<property name="toupiao" />
<property name="ddata" />
<property name="ntype" />
<property name="cuichu" />
</class>
</hibernate-mapping>

分享到:
评论

相关推荐

    hibernate 多表关联 中间表

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

    Hibernate(多对多表操作)

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

    hibernate多对多关联映射

    本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...

    hibernate多对多

    你可以通过导入这个数据库到你的开发环境中,然后编写相应的代码,执行CRUD操作,来实践和理解Hibernate处理多对多关系的方法。 总结,Hibernate的多对多关系映射是数据库设计中非常重要的一个部分,它简化了Java...

    hibernate多对多查询

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

    hibernate 多对多源代码

    虽然多对多关联方便了数据操作,但也可能导致性能问题,因为每次关联操作都需要涉及中间表。在大数据量的场景下,可能需要优化查询策略,比如使用JOIN查询而非多次单独查询,或者在业务层缓存部分关联数据。 总结,...

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

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

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

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

    hibernate(多对多关系映射)

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

    hibernate多对多的简单实现

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

    hibernate 多对多操作

    标题“hibernate 多对多操作”表明了本文将探讨的是在Java编程中,使用Hibernate框架处理数据库中的多对多关联关系。Hibernate是Java领域广泛使用的对象关系映射(ORM)工具,它允许开发者用面向对象的方式处理...

    Hibernate关于注解的一对多,多对多,一对一

    2. **@JoinTable**:多对多关系通常需要一个中间表来存储双方的关联,`@JoinTable`用来定义这个中间表,包括它的名字、连接的列名等。 ```java @Entity public class User { @ManyToMany @JoinTable(name = "user...

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

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

    hibernate多对多双向关联

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

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

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

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    hibernate 映射关系学习入门 多对多实体映射

    在Hibernate中,多对多关系通过中间表(也称为联接表或关联表)来实现,这个表包含来自两个表的外键。 三、配置多对多映射 在Hibernate中,配置多对多映射通常需要以下几个步骤: 1. **实体类定义**:为每个实体...

    Hibernate基于连接表的一对多单向关联

    在上述代码中,我们使用了注解`@ManyToOne`和`@JoinColumn`来声明`Address`类中的`person`字段是一个多对一的关联,并指定了外键列的名称。 3. 数据库表结构:`personAdd.sql`可能包含了创建`Person`和`Address`表...

    hibernate 多对多映射实例,学生 选课

    在这个“hibernate 多对多映射实例,学生 选课”项目中,我们将探讨如何使用Hibernate处理多对多关系,以及如何构建一个学生选课的系统。 首先,我们要理解多对多关系。在现实生活中,学生和课程之间就是一个典型的...

Global site tag (gtag.js) - Google Analytics