標籤:one-to-many使用中間表進行關聯 一對多使用中間表進行關聯映射
【Hibernate】之關於使用串連表實現一對多關聯映射
基於中間表實現的一對多的關聯映射,還是比較常見的。
Person(人)和Group(組)
Annotations配置
@Entity@Table(name="t_group")publicclass Group { private Integer id; private String name; private Set<Person> persons=newHashSet<Person>(); @OneToMany @JoinTable(name="t_p",joinColumns={@JoinColumn(name="g_id")}, inverseJoinColumns={@JoinColumn(name="p_id")}) public Set<Person> getPersons() { returnpersons; } publicvoid setPersons(Set<Person> persons) { this.persons = persons; } @Id @GeneratedValue public Integer getId() { returnid; } publicvoid setId(Integer id) { this.id = id; } @Column(name="g_name") public String getName() { returnname; } publicvoid setName(String name) { this.name = name; }}
@Entity@Table(name="p_person")publicclass Person { private Integer id; private String name; private Integer age; @Id @GeneratedValue public Integer getId() { returnid; } publicvoid setId(Integer id) { this.id = id; } @Column(name="p_name") public String getName() { returnname; } publicvoid setName(String name) { this.name = name; } @Column(name="p_age") public Integer getAge() { returnage; } publicvoid setAge(Integer age) { this.age = age; }}
XML配置
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="csg.hibernate.entity"> <class name="Group" table="t_group"> <id name="id"> <column name="id"/> <generator class="native" /> </id> <property name="name" /> <set name="persons" table="t_p"> <key column="g_id"/> <many-to-many column="p_id" class="Person" unique="true" /> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="csg.hibernate.entity"> <class name="Person" table="t_person"> <id name="id"> <column name="id"/> <generator class="native" /> </id> <property name="name" /> <property name="age" /> </class></hibernate-mapping>
在一對多的中間表映射中,Hibernate自動會轉化為多對多來處理!
hibernate之關於使用串連表實現一對多關聯映射