Hibernate11_映射关系---OneToOne双向
来源:互联网 发布:360 cn域名多少钱买的 编辑:程序博客网 时间:2024/06/06 00:05
OneToOne双向是在One2One单向基础上修改
1、IDCard不变
IDC实体类
package com.chb.model;public class IDCard { private int id; private String no; private Person person; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNo() { return no; } public void setNo(String no) { this.no = no; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }}
IDCard.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" ><!-- 映射对应的package --><hibernate-mapping package="com.chb.model"> <!-- 实体类IDCard与数据库中表t_id_card对应 --> <class name="IDCard" table="t_id_card"> <id name="id" column="c_id"> <!-- 主键自增 --> <generator class="native"></generator> </id> <property name="no" /> <!-- 外键关联使用manyToOne, 但是设置unique="ture", 限制为一对一的关系 --> <many-to-one name="person" column="p_id" unique="true"></many-to-one> </class></hibernate-mapping>
2、只需在Person类中添加IDCard对象, 在Person.hbm.xml中设置设置one-to-one关联, 设置property-ref=”person”表名有对端(IDCard)中的person对象维护关系
2.1、Person实体类
package com.chb.model;public class Person { private int id; private String name; private IDCard idCard; 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 IDCard getIdCard() { return idCard; } public void setIdCard(IDCard idCard) { this.idCard = idCard; }}
2.2、Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" ><!-- 映射对应的package --><hibernate-mapping package="com.chb.model"> <!-- 实体类Person与数据库中表person对应 --> <class name="Person" table="t_person"> <id name="id" column="p_id"> <!-- 主键自增 --> <generator class="native"></generator> </id> <property name="name" column="p_name"></property> <!-- name 属性中IDCard对象的名称,property-ref="person"表名有对端(IDCard)中的person对象维护关系。 --> <one-to-one name="idCard" property-ref="person"></one-to-one> </class></hibernate-mapping>
3、测试
3.1、one2one双向添加测试。
package com.chb.model;import org.hibernate.Session;import com.chb.hbUtils.HibernateUtils;public class Test { @org.junit.Test public void test01() { Session session = null; //获取session session = HibernateUtils.getSession(); //开启事务 session.beginTransaction(); //测试添加 IDCard idCard = new IDCard(); idCard.setNo("001"); session.save(idCard); Person p = new Person(); p.setName("chb"); p.setIdCard(idCard); session.save(p); //提交事务 session.getTransaction().commit(); HibernateUtils.close(); }}
3.2、测试结果:是由IDCard端的person对象维护关系。所以通过p.setIdCard(idCard)就无效, 所以没有关联关系。
执行的sql
Hibernate: create table t_id_card ( c_id integer not null auto_increment, no varchar(255), p_id integer, primary key (c_id) ) engine=InnoDBHibernate: create table t_person ( p_id integer not null auto_increment, p_name varchar(255), primary key (p_id) ) engine=InnoDBHibernate: alter table t_id_card drop index UK_3dn8d7nqti422123arcwiwcniHibernate: alter table t_id_card add constraint UK_3dn8d7nqti422123arcwiwcni unique (p_id)Hibernate: alter table t_id_card add constraint FKka2jsnojthq1ip58u1fqnlfwh foreign key (p_id) references t_person (p_id)Hibernate: insert into t_id_card (no, p_id) values (?, ?)Hibernate: insert into t_person (p_name) values (?)
4、先添加person, 在添加IDCard,
package com.chb.model;import org.hibernate.Session;import com.chb.hbUtils.HibernateUtils;public class Test { @org.junit.Test public void test01() { Session session = null; //获取session session = HibernateUtils.getSession(); //开启事务 session.beginTransaction(); //测试添加 //先添加person Person p = new Person(); p.setName("wx"); session.save(p); //再添加IDCard IDCard idCard = new IDCard(); idCard.setNo("002"); idCard.setPerson(p); session.save(idCard); //提交事务 session.getTransaction().commit(); HibernateUtils.close(); }}
结果:
5、load测试, 从person端获取
6、load测试, 从idCard端获取
7、最佳实践
阅读全文
0 0
- Hibernate11_映射关系---OneToOne双向
- hibernate关系映射--双向一对一@OneToOne
- JPA OneToOne双向关系
- Hibernate10_映射关系---OneToOne单向
- Mybatis 一对多(OneToOne)关系映射
- Hibernate关系映射--单向一对一@OneToOne
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对多(OneToOne)关系映射
- Mybatis 一对多(OneToOne)关系映射
- 09hibernate hibernate的关系映射之OneToOne(重点)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- JPA总结——实体关系映射(一对一@OneToOne)
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- Spring boot data JPA数据库映射关系 : @OneToOne,@OneToMany,@ManyToMany
- Hibernate的双向关系映射
- Hibernate09_映射关系---OneToMany双向
- Number()和parseInt()的区别
- hdu6044 Limited Permutation【读入优化+dfs】
- 27 个机器学习、数学、Python 速查表
- windows服务器下配置memcache最大内存值
- leetcode 238. Product of Array Except Self
- Hibernate11_映射关系---OneToOne双向
- 浅谈Session与Cookie的区别与联系
- String()和toString()的区别
- JAVAEE 金典试题
- 【leetcode】第59题 Spiral Matrix II 题目+解析+代码
- VC&C++相关博客
- 欢迎使用CSDN-markdown编辑器
- linux解压缩文件
- hdu6181Two Paths(第十场-dij求次短路)