`

Hibernate多对多自身关联的例子代码

阅读更多
背景说明:论坛中每个用户(Admin类)有多个好友,每个好友,可以是多个用户的好友。是表自身多对多的关系。
Admin类代码:
package com.soonj.entity;

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


public class Admin {

private Integer aid;//

private String adminName;//admin's name--unique

private String password;//admin's password

private String authDay;//authorize day

private Set<Admin> friends = new HashSet<Admin>();

private Set<AdminMessage> messages = new HashSet<AdminMessage>();

public void addFriend(Admin friend){
friends.add(friend);
}

public void addMessage(AdminMessage message){
messages.add(message);
message.setBelonger(this);
}

public Set<Admin> getFriends() {
return friends;
}

public void setFriends(Set<Admin> friends) {
this.friends = friends;
}

public String getAdminName() {
return adminName;
}

public void setAdminName(String adminName) {
this.adminName = adminName;
}

public Integer getAid() {
return aid;
}

public void setAid(Integer aid) {
this.aid = aid;
}

public String getAuthDay() {
return authDay;
}

public void setAuthDay(String authDay) {
this.authDay = authDay;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public Set<AdminMessage> getMessages() {
return messages;
}

public void setMessages(Set<AdminMessage> messages) {
this.messages = messages;
}

}


CREATE TABLE `friendrelation` (                                   
`OwenerId` int(11) NOT NULL default '0',          
`FriendId` int(11) NOT NULL default '0',          
PRIMARY KEY (`OwenerId`,`FriendId`)                                  
) ENGINE=MyISAM DEFAULT CHARSET=utf8

admin类的 hibernate文件Admin.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">
<hibernate-mapping package="com.soonj.entity">
<class name="Admin" table="admins">
<id name="aid" column="aid" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
<property name="adminName" column="adminName" not-null="true" unique="true"></property>
<property name="password" column="password" not-null="true"></property>
<property name="authDay" column="authDay" not-null="true"></property>
<set name="friends" table="friendrelation" cascade="save-update" lazy="false" inverse="false">
<key column="OwenerId"></key><!-- 中间表第一个字段 -->
<many-to-many class="Admin" column="FriendId"/><!-- 中间表第二个字段 -->
</set>
<set name="messages" cascade="save-update" lazy="false" inverse="true">
<key column="mfid"></key>
<one-to-many class="AdminMessage"/>
</set>
</class>
</hibernate-mapping>



参考:
http://topic.csdn.net/u/20080516/11/c86b95b1-8a09-43e6-96cd-8058f051bfe4.html
分享到:
评论
1 楼 chentian0216 2013-02-04  
额 有个问题
<set name="friends" table="friendrelation" cascade="save-update" lazy="false" inverse="false"> 
<key column="OwenerId"></key><!-- 中间表第一个字段 --> 
<many-to-many class="Admin" column="FriendId"/><!-- 中间表第二个字段 --> 
</set> 
其中lazy = false
这样的话不是会一直形成死循环吗???

相关推荐

    Hibernate一对多双向自身关联demo代码

    在这个“Hibernate一对多双向自身关联demo代码”中,我们将深入理解如何实现一个实体类与其自身进行一对多的双向关联。这种关联在实际应用中常见于例如用户的朋友关系、员工的上下级关系等场景。 首先,让我们了解...

    hibernate自身关联一对多实例(树形结构)

    总结来说,"Hibernate自身关联一对多实例(树形结构)"涉及到Java对象与数据库表之间的映射,以及如何在代码中建立和管理这种关联。正确理解和应用这些知识,可以帮助开发者高效地处理层次型数据,提高开发效率。对于...

    hibernate3.2级联关系自身一对多双向关联

    在Java持久化领域,Hibernate是一个广泛应用的ORM(对象...在实际项目中,这种关联模式常用于构建社交网络、组织结构、多对多关系的中间表等多种场景。因此,深入学习和实践这部分内容对于提升Java开发能力非常有帮助。

    Hibernate注解 关联关系映射注解.docx

    多对多的关联关系可以使用`@ManyToMany`注解,Hibernate会自动创建一个中间表来存储两个实体类之间的关联。如果需要自定义中间表的名称或字段,可以使用`@JoinTable`注解。在双向多对多关联中,依然需要`mappedBy`来...

    hibernate 自连接 emp例子

    在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...

    hibernate中的对象关系模型

    7. **自身关联(Self-association)**: 类的一个实例可以关联自身,例如树的枝丫结构。在Java中,类中会包含一个自身类型的属性,使用`@ManyToOne`或`@OneToOne`等注解来映射。 8. **泛化(Generalization)**: ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、...

    Hibernate Annotation 学习笔记

    《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。...在后续的学习笔记中,我们将继续探索更多关于Hibernate Annotation的实用技巧和高级特性。

    精通Hibernate:对象持久化技术第二版part3

    7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、...

    ssh(structs,spring,hibernate)框架中的上传下载

     TfileDAOHibernate提供了对TfileDAO接口基于Hibernate的实现,如代码 3所示:  代码 3 基于Hibernate 的fileDAO实现类 1. package sshfile.dao; 2. 3. import sshfile.model.*; 4. import org.springframework....

    Java事务管理学习之Hibernate详解

    然而,Hibernate自身并不直接处理事务管理,而是依赖于底层的JDBC(Java Database Connectivity)和JTA(Java Transaction API)来实现。 Hibernate的核心组件是SessionFactory和Session。SessionFactory是一个全局...

    一对一映射一对一映射

    一对一映射是数据库设计中的一个重要概念,特别是在关系型数据库中,它用于描述两个表之间的一种特殊关系,即每个表中的记录最多只能与另一个表中的一条记录相关联。这种关系非常紧密,通常出现在一个实体的信息被...

    hibenate成功配置文件

    在IT行业中,Hibernate是一个强大的Java持久化框架,它简化了数据库与Java对象之间的交互...同时,遇到配置不成功的情况,不应轻易放弃,而应多尝试、多查阅资料,这样不仅能解决问题,也能提升自身的解决问题的能力。

    基于JAVA的金泰酒店管理系统的设计与实现.zip

    在实际开发中,开发者可能选择使用ORM(对象关系映射)框架,如Hibernate或MyBatis,来简化数据库操作,提高开发效率。这些框架能够将JAVA对象和数据库表进行绑定,使得开发者可以通过操作对象来实现对数据库的操作...

    OSWorkflow开发指南

    - **OSUser现有例子中的bug**:某些示例代码中可能存在未处理异常或逻辑错误。 #### Provider的作用 Provider在OSWorkflow中主要负责提供数据和行为的支持。通常情况下,每个步骤都会有一个对应的Provider来处理...

    Grails基础教程

    - **多对多关系**:讲解了多对多关系的处理方式,包括中间表的使用。 - **自关联关系**:讨论了领域类与其自身的关联关系的实现方法。 #### 六、让模型开始工作 **6.1 通过脚手架迅速创建用户界面** - **脚手架**...

Global site tag (gtag.js) - Google Analytics