Hibernate 基于set的双向关联
程序员文章站
2022-04-22 19:40:28
...
继续上一节,上一节我们建立了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 class="native"></generator> </id> <property name="date" 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)关联中,你可以任意选取一端,因为两端之间并没有差别。
上一篇: 修改element-ui组件默认样式
下一篇: RDF与SPARQL的一些知识整理