`

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
这样的话不是会一直形成死循环吗???

相关推荐

Global site tag (gtag.js) - Google Analytics