读书人

Hibernate 联系关系映射之多对多

发布时间: 2012-11-06 14:07:00 作者: rapoo

Hibernate 关联映射之多对多

Hibernate的关联映射包括:

一对一(Persion - IDCard)

一对多—epartment - Employee)

多对一(Employee - Department)

多对多(Teacher - Student)

组件映射(User - Name)

集合映射(Set、List、Map)

inverse和cascade(Employee - Department)

?

本文以多对多为例:

多个老师对应多个学生(Teacher- Student)

在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多。Hibernate会为我们创建中间关联表,转换成两个一对多。

<set? name="teacher"? table="teacher_student">

??? <key? column="teacher_id"/>

??? <many-to-many? lazy="true"><id name="id"><generator table="teacher_student"><key column="teacher_id"></key><many-to-many column="student_id"/></set></class></hibernate-mapping><!-- ///////////////////////////////////////////// --><?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.cos.entity.Student" lazy="true"><id name="id"><generator table="teacher_student"><key column="student_id"></key><many-to-many column="teacher_id"/></set></class></hibernate-mapping>

?

Hibernate配置文件:hibernate.cfg.xml

CREATE TABLE `teacher` (  `id` int(11) NOT NULL auto_increment,  `name` varchar(255) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1CREATE TABLE `student` (  `id` int(11) NOT NULL auto_increment,  `name` varchar(255) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1CREATE TABLE `teacher_student` (  `teacher_id` int(11) NOT NULL,  `student_id` int(11) NOT NULL,  PRIMARY KEY  (`student_id`,`teacher_id`),  KEY `FK2E2EF2DEE60D3423` (`teacher_id`),  KEY `FK2E2EF2DED571E983` (`student_id`),  CONSTRAINT `FK2E2EF2DED571E983` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`),  CONSTRAINT `FK2E2EF2DEE60D3423` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1

?

?

?

?

读书人网 >软件架构设计

热点推荐