读书人

Hibernate 基于set的双向联系关系

发布时间: 2012-10-31 14:37:32 作者: rapoo

Hibernate 基于set的双向关联

继续上一节,上一节我们建立了person-event的一对多关联,要在此基础上建立他们的多对多关联只需在event端建立一个

event-person的一对多关联即可。所以我们只需改动Event.java和映射文件event.hbm.xml

?

Event.java

?

?

package com.hb.jo;import java.util.Date;import java.util.HashSet;import java.util.Set;public class Event {private long id;private String title;private Date date;private Set<Person> persons = new HashSet<Person>();public Set<Person> getPersons() {return persons;}public void setPersons(Set<Person> persons) {this.persons = persons;}//因为hibernate通过java的反射机制创建对象,所以必须提供无参的构造public Event(){}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}}

?

?

event.hbm.xml

?

?

<?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.hb.jo.Event" table="Events"><id name="id" column="event_id"><generator type="timestamp" column="Date"></property><property name="title" column="Title"></property><set name="persons" table="Person_Events" inverse="true"><key column="event_id"></key><many-to-many column="person_id" class="com.hb.jo.Person"></many-to-many></set></class></hibernate-mapping>

?

?

关于inverse = 'true'的解释:

hibernate api 写道对于你和Java来说,一个双向关联仅仅是在两端简单地正确设置引用。然而,Hibernate并没有足够的信息去正确地执行INSERT和UPDATE语句(以避免违反数据库约束),所以它需要一些帮助来正确的处理双向关联。把关联的一端设置为inverse将告诉Hibernate忽略关联的这一端,把这端看成是另外一端的一个镜象(mirror)。这就是所需的全部信息,Hibernate利用这些信息来处理把一个有向导航模型转移到数据库schema时的所有问题。你只需要记住这个直观的规则:所有的双向关联需要有一端被设置为inverse。在一对多关联中它必须是代表多(many)的那端。而在多对多(many-to-many)关联中,你可以任意选取一端,因为两端之间并没有差别。?

?

读书人网 >编程

热点推荐