hibernate一对一主键关联映射(二)---双向关联
1.新建工程项目hibernate_one2one_pk_2,加入hibernate所需的Jar包和数据库mysql驱动Jar包。
2.编写工具类HibernateUtils.java和ExportDB.java,代码如下:
HibernateUtils.java
- package com.i51pro.hibernate;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.Configuration;
- public class HibernateUtils {
- private static SessionFactory sessionFactory;
- static {
- try {
- Configuration cfg = new Configuration().configure();
- sessionFactory = cfg.buildSessionFactory();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- public static SessionFactory getSessionFactory() {
- return sessionFactory;
- }
- public static Session getSession() {
- return sessionFactory.openSession();
- }
- public static void closeSession(Session session) {
- if (session != null) {
- if (session.isOpen()) {
- session.close();
- }
- }
- }
- }
ExportDB.java
- package com.i51pro.hibernate;
- import org.hibernate.cfg.Configuration;
- import org.hibernate.tool.hbm2ddl.SchemaExport;
- public class ExportDB {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Configuration cfg = new Configuration().configure();
- SchemaExport export = new SchemaExport(cfg);
- export.create(true, true);
- }
- }
3.编写实体类和映射文件,代码如下:
IdCard.java
- package com.i51pro.hibernate;
- public class IdCard {
- private int id;
- private String cardNo;
- private Person person;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getCardNo() {
- return cardNo;
- }
- public void setCardNo(String cardNo) {
- this.cardNo = cardNo;
- }
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- }
Person.java
- package com.i51pro.hibernate;
- 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;
- }
- }
IdCard.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.i51pro.hibernate.IdCard" table="t_idcard">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="cardNo"/>
- <one-to-one name="person" />
- </class>
- </hibernate-mapping>
Person.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.i51pro.hibernate.Person" table="t_person">
- <id name="id">
- <generator class="foreign">
- <param name="property">idCard</param>
- </generator>
- </id>
- <property name="name"/>
- <one-to-one name="idCard" constrained="true" />
- </class>
- </hibernate-mapping>
4.编写hibernate映射文件,代码如下:
hibernate.cfg.xml
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_one2one_pk_2</property>
- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="hibernate.connection.username">root</property>
- <property name="hibernate.connection.password">admin</property>
- <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
- <property name="hibernate.show_sql">true</property>
- <mapping resource="com/i51pro/hibernate/Person.hbm.xml"/>
- <mapping resource="com/i51pro/hibernate/IdCard.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
5.在工程项目hibernate_one2one_pk_2下,新建一个SourceFolder,命名为test,在test包下编写单元测试类One2OneTest.java进行单元测试,代码如下:
- package com.i51pro.hibernate;
- import org.hibernate.Session;
- import org.hibernate.Transaction;
- import junit.framework.TestCase;
- public class One2OneTest extends TestCase {
- public void testSave1() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- Transaction tx = session.beginTransaction();
- IdCard idCard = new IdCard();
- idCard.setCardNo("88888888");
- Person person = new Person();
- person.setName("李小晚");
- person.setIdCard(idCard);
- /**
- * 不会发生TransientOabjectException异常
- * 因为一对一主键关联映射中,默认了cascade属性
- */
- session.save(person);
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
- public void testLoad1() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- Transaction tx = session.beginTransaction();
- Person person = (Person)session.load(Person.class, 1);
- System.out.println("person.name:" + person.getName() );
- System.out.println("idCard.name:" + person.getIdCard().getCardNo());
- session.getTransaction().commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }
- }
- public void testLoad2() {
- Session session = null;
- try {
- session = HibernateUtils.getSession();
- Transaction tx = session.beginTransaction();
- IdCard idCard = (IdCard)session.load(IdCard.class, 1);
- System.out.println("person.name:" + idCard.getPerson().getName());
- System.out.println("idCard.name:" + idCard.getCardNo());
- tx.commit();
- }catch(Exception e) {
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally {
- HibernateUtils.closeSession(session);
- }
- }
- }
hibernate一对一主键关联映射(二)---双向关联相关推荐
- hibernate一对一主键唯一外键关联(二)
1.新建工程项目hibernate_one2one_ufk_2,添加hibernate所需的Jar包和数据库驱动的Jar包. 2.编写工具类HibernatUtils.java和ExportDB.ja ...
- hibernate一对一主键关联映射(一)---单向关联
1.新建工程项目hibernate_one2one_pk_1,添加hibernate所需Jar包和mysql驱动Jar包. 2.建立工具类HihernateUtils.java和ExportDB.ja ...
- Hibernate一对一主键单向关联
2019独角兽企业重金招聘Python工程师标准>>> 模型user,address address对user进行外键关联,意思就是address的主键是由user的主键关联生成的, ...
- hibernate一对一主键唯一外键关联(一)
1.新建工程项目hibernate_one2one_ufk_1,添加hibernate所需Jar包和数据库驱动Jar包. 2.编写工具类HibernateUtils.java和ExportDB.jav ...
- hibernate一对一主键关联映射(单向关联Person-----IdCard)
一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段 例子: package com.hibernate; public class IdCard { private int id; ...
- 多对多关联映射(双向关联)见项目:me_many_to_many
1.模型 一个用户拥有多个角色,一个角色拥有多个用户. 2.实体类(省略set,get方法) public class User { private int id; private String ...
- Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联...
2018-11-10 22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...
- hibernate的一对一主键双向映射关系和外键双向映射关系(一)
主键关联的重点是关联的两个表共享一个主键值.本例中采用,一个单位在网上的一个系统中注册会员. 1,会员数据保存在会员表company中,每个会员的登录账号保存在表login中: 2,一个会员只有一个登 ...
- Hibernate 一对一外键单向关联
[align=center][size=medium]Hibernate 一对一外键单向关联[/size][/align] 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向 ...
最新文章
- Log4j使用技巧——让子类使用父类中定义的Logger
- GitHub霸榜项目:30万字图解算法题典,超全实用资源,狂揽6000星
- 4.空悬指针和野指针
- PMCAFF微课堂 | 《社交红利2.0:即时引爆》徐志斌教你玩转社交
- 技术派的梦想旅行 用大数据推动旅游2.0
- HDU Problem - 1533 Going Home(费用流板子题)
- 单例设计模式-饿汉式
- vue3源码中的最长递增子序列
- 如何在Tomcat中设置JNDI数据库连接池-Spring教程示例
- 浓浓中国风的雅致新年元旦PSD分层海报模板
- Python字典学习
- 贴片二极管外形封装资料
- win7共享20人限制 清除_中控智慧考勤门禁_机器直连软件及清除管理员
- 【每日一P】简单实用的调色原理
- 计算机论文答辩注意哪些问题,计算机毕业设计答辩(问题+技巧)
- 号卡推广管理系统源码 手机卡流量卡推广网站源码 带后台版本
- 欧几里得距离转换(EDT)算法
- 读书笔记 | 为什么从世界500强CEO、政界要员,到著名演员都用这个方法来提高效率?
- 纯C语言用Windows api写画函数图像
- ElasticSearch之处理深度分页
热门文章
- 解决问题最简单的方法
- linux+命令行粘贴不执行,在linux命令行粘贴命令后果
- 信息安全实验【CA的安装与使用实验】(独立根)
- 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
- MYSQL加密解密 中文、数字 AES_ENCRYPT,AES_DECRYPT
- unity星空银河绚烂天空盒宇宙场景
- OSChina 周四乱弹 —— 如果你追到我,我就和你……
- 中国上市互联网公司市值排名
- 开源的OA办公系统,解决日常工作管理问题
- 漫谈程序猿系列:怎么告别“混日子”