前几天去面试问到这个问题,因为以前看的是老马的视频,它的重点是Annotation配置,xml就不太熟了,现在自己总结一下。
首先看 一对多单向关联。
一对多,可以建立两个类:Group类和User类,因为Group是一方,User是多方,要在Group里对应多个User,用Set比较好,因为他可以去重复。
Group类:
package com.xuxiao.hibernate.model;
import java.util.HashSet;
import java.util.Set;
public class Group {
private int id;
private String name;
private Set<User> users = new HashSet<User>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public Set<User> getUsers() {
return users;
}
}
User类:
package com.xuxiao.hibernate.model;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
下面我们看看hbm.xml的配置吧:
Group.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.xuxiao.hibernate.model.Group" dynamic-update="true" table="t_group">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<set name="users">
<key column="groupId"></key>
<one-to-many class="com.xuxiao.hibernate.model.User" />
</set>
</class>
</hibernate-mapping>
User.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.xuxiao.hibernate.model.User" dynamic-update="true" table="t_user">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
</class>
</hibernate-mapping>
因为是一对多,所以应该在Group.hbm.xml中进行配置
用set标签,里面用key标签指定两个表之间的外键,再放one-to-mary,再指定many 的路径即可。