hibernate自身多对多关联

最近在做毕业设计,其中包含了好友关系的设计,经过几天的请教和查资料,终于有了个半成品的好友关系!
废话不多说,直接上代码:
public class User {
	private int id;
	private String username;
	private String name;
        private Set<User> friends = new HashSet<User>();
	private Set<User> parent = new HashSet<User>();
        getter/setter 方法略
}

一个User可以添加多个User为好友,并且一个User可以被多个User添加为好友。在Hibernate中,可以用自身多对多关联实现。配置文件如下:
<?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> 
	<class name="User">
		<id name="id" type="java.lang.Integer">  
            <generator class="native"></generator>  
        </id>  
        <property name="username" type="string"></property>
        <property name="name" type="string"></property>
        <set name="friends" inverse="false" cascade="all">
        	<key>
        		<column name="userid"></column>
        	</key>
        	<many-to-many class="User" column="friendid"></many-to-many>
        </set>
	</class> 
</hibernate-mapping>

生成的用户表(User):

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;

中间表friends:
CREATE TABLE `friends` (
  `userid` int(11) NOT NULL,
  `friendid` int(11) NOT NULL,
  PRIMARY KEY (`userid`,`friendid`),
  KEY `FKDC3B4995E9C283D0` (`friendid`),
  KEY `FKDC3B4995CBFCDBD` (`userid`),
  CONSTRAINT `FKDC3B4995CBFCDBD` FOREIGN KEY (`userid`) REFERENCES `user` (`id`),
  CONSTRAINT `FKDC3B4995E9C283D0` FOREIGN KEY (`friendid`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;


至此已基本成型,随项目持续更新...
由于笔者水平有限,如有错误,请联系我批评指正。

猜你喜欢

转载自wangankang.iteye.com/blog/1634164