标签:style blog http io color ar for sp strong
² 两个对象之间是一对一的关系,如Person-IdCard(人—身份证号)
² 有两种策略可以实现一对一的关联映射
实例场景:人—-> 身份证号(PersonàIdCard),从IdCard看不到Person对象
<hibernate-mapping> <class name="com.wjt276.hibernate.IdCard" table="t_idcard"> <id name="id" column="id"> <generator class="native"/> </id> <property name="cardNo"/> </class> </hibernate-mapping> |
<hibernate-mapping> <class name="com.wjt276.hibernate.Person" table="t_person"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name"/> <!-- <many-to-one>:在多的一端(当前Person一端),加入一个外键(当前为idCard)指向一的一端(当前IdCard),但多对一 关联映射字段是可以重复的,所以需要加入一个唯一条件unique="true",这样就可以此字段唯一了。--> <many-to-one name="idCard" unique="true"/> </class> </hibernate-mapping> |
create table t_idcard (id integer not null auto_increment, cardNo varchar(255), primary key (id)) create table t_person (id integer not null auto_increment, name varchar(255), idCard integer unique, primary key (id)) alter table t_person add index FK785BED80BE010483 (idCard), add constraint FK785BED80BE010483 foreign key (idCard) references t_idcard (id) |
session = HibernateUtils.getSession(); tx = session.beginTransaction();
IdCard idCard = new IdCard(); idCard.setCardNo("88888888888888888888888"); /** * 如果先不保存idCard,则出抛出Transient异常,因为idCard不是持久化状态。 */ session.save(idCard);
Person person = new Person(); person.setName("菜10"); person.setIdCard(idCard);
session.save(person);
// 提交事务 tx.commit(); |
产生SQL语句:
Hibernate: insert into t_idcard (cardNo) values (?)
Hibernate: insert into t_person (name, idCard) values (?, ?)
一对一 唯一外键关联映射得 多对一 关联映射的特例,
可以采用<many-to-one>标签,指定多的一端的unique=true,这样的化就限制了多的一端的唯一。就是通过这种手段映射一对一 唯一外键关联。
011一对一 唯一外键关联映射_单向(one-to-one)
标签:style blog http io color ar for sp strong
原文地址:http://www.cnblogs.com/crazylqy/p/4077952.html