Hibernate单向的一对多关联
单向的一对多关联映射关系主要是通过外键来关联。一对多的关联映射是在表示“多”的一方的数据表中增加一个外键,并由“一”的一方指向“多”的一方。
单向一对多关联的持久化类里需要包含一个集合属性,在“一”的一方访问“多”的一方时,“多”的一方将以集合的形式来体现。如一个用户对应多个地址,则在User类的定义中会包含一个集合属性,该属性就用来保存多个Address实体。
假设一个用户对应多个地址,则用户表User和地址表Address在数据库中表结构如下:
USER表
Field Type Null Key Default Extra
userid Int(11) No PRI NULL auto_increment
name Varchar(20) YES NULL
password Varchar(12) YES
address表
Field Type Null Key Default Extra
addressid Int(11) NO PRI NULL auto_increment
addressinfo Varchar(255) YES NULL
user_id Int(11) NO MUL NULL
address表中user_id即为外键列,它表示一个用户可以拥有多个地址。
下面需要在实体类User里添加Address的集合,以形成单向一对多的关系。User类的代码如下:
import java.util.HashSet;
import java.util.Set;
public class User {
private int userid;
private String name;
private String password;
private Set addresses = new HashSet();
此处省略属性的getter和setter方法
}
表address的持久化类为Address.java,其代码如下:
public class Address{
private int addressid;
private String addressinfo;
}
建立一对多关联时,需要在“一”端的映射文件中使用one-to-many元素来映射关联实体。one-to-many元素可以包含的可选属性如下:
class:指定关联类的名称。
not-found:该属性取值为exception或ingnore。当取值为exception时,表明若从表记录所参照的主表记录不存在时,Hiberante会抛出异常;当取值为ingnore时,则表示忽略该异常。
User类映射文件如下:
Address映射文件如下: