Hibernate读书笔记-----Hibernate的关联映射之1-1关联映射(一)

2014-11-24 08:34:33 · 作者: · 浏览: 0

二、1—1
无论是单向1-1映射关联,还是双休1-1映射关联,都有三种映射策略:基于主键、基于外键、采用连接表。
1、单向1-1映射关联
1.1、基于主键的单向1-1映射关联
对于基于主键的单向1-1关联,基于主键关联的持久化类不能拥有自己的主键生成器策略,它的主键由关联实体来负责生成。
是根据他自己的person属性来获得的。即他通过自身的一个getPerson()方法来获得Person对象。然后通过Person对象中的getID()方法获得id,然后赋值给自身id。这样就可以不需要自己来生成id。
采用基于主键的1-1关联时,应使用元素来映射关联实体,配置元素时需要指定一个name属性。
实例(Person<--IDCard)
Person
[java]
public class Person {
private Integer id;
private String name;
private IDCard idCard;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public IDCard getIdCard() {
return idCard;
}

public void setIdCard(IDCard idCard) {
this.idCard = idCard;
}

}
IDCard:
[java]
public class IDCard {
private Integer id;
private String useLife;
public String getUseLife() {
return useLife;
}

public void setUseLife(String useLife) {
this.useLife = useLife;
}

private Person person;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Person getPerson() {
return person;
}

public void setPerson(Person person) {
this.person = person;
}

}
映射文件:
Person.hbm.xml
[html]









IDCard.hbm.xml
[html]






person







在上面的映射文件中,采用这种关联映射策略是,idCard表作为从表,此时idCard表的主键将没有自己的主键生成策略。他是根据person表中的主键来生成的。同时从表(idCard)里记录的主键将会与主表(person)里的记录保存一致。
IDCard中的id既是主键也是外键。那么idCard表如何通过person表来生成主键的呢?
foreign生成器中有一个元素:property。这个元素代表了该表的外键是从哪一个属性中获得的。通过上面的配置可以发现idCard表的外键是从person属性中获得的。它的外键就是通过person属性中的getId获得id,然后将该id直接赋给id。
使用constrained="true"表明该类对应表和被关联的对象所对应的数据库表之间通过一个外键引用对主键进行约束。
通过上面的配置后,就可以对两个实体进行操作了:
[java]
static void add(){
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
IDCard idCard = new IDCard();
idCard.setUseLife("10年");

Person person = new Person();
person.setName("chentmt");

idCard.setPerson(person);
session.save(person);
session.save(idCard);
tx.commit();

}finally{
if(session!=null)
session.close();
}
}

1.2、基于外键的单向1-1映射关联
基于外键的关联映射与一般的N-1关联映射没有多大区别,只需要将元素中增加unique="true"属性即可。如下:
[html]








/>


unique="true"代表了idCard表的personid外键列上增加了唯一约束--这样就完成基于外键的单向1-1映射了。
其他的配置文件和持久化类都不需要做修改。

1.3、有连接表的单向1-1映射关联
和上面差不多,只需要在有连接表的N-1关联映射中的元素增加一个unique="true"即可。如下:
[html]














2、双向1-1关联映射