博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
06hibernate_one2one_pk_2(you can forget)
阅读量:6325 次
发布时间:2019-06-22

本文共 3871 字,大约阅读时间需要 12 分钟。

package com.bjsxt.hibernate;
import org.hibernate.Session;
import junit.framework.TestCase;
public 
class One2OneTest 
extends TestCase {
    
public 
void testSave1() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            IdCard idCard = 
new IdCard();
            idCard.setCardNo("88888888888888");
            
            Person person = 
new Person();
            person.setName("孙悟空");
            person.setIdCard(idCard);
            
            
//
不会出现TransientObjectException异常
            
//
因为一对一主键关联映射中,默认了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();
            session.beginTransaction();
            
            Person person = (Person)session.load(Person.
class, 1);
            System.out.println("person.name=" + person.getName());
            System.out.println("idCard.cardNo=" + person.getIdCard().getCardNo());
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }        
    
public 
void testLoad2() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            IdCard idCard = (IdCard)session.load(IdCard.
class, 1);
            System.out.println("idcard.cardNo=" + idCard.getCardNo());
            System.out.println("idcard.person.name=" + idCard.getPerson().getName());
            
            session.getTransaction().commit();
        }
catch(Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
finally {
            HibernateUtils.closeSession(session);
        }
    }        
    
}
--------------------------------------------------
hibernate一对一主键关联映射(双向关联Person<---->IdCard)
//
需要在idcard映射文件中加入<one-to-one>标签指向person:<one-to-one name="person"/>,
//
指示hibernate如何加载person默认根据主键加载
<hibernate-mapping>
    <
class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
        <id name="id">
            <generator 
class="native"/>
        </id>
        <property name="cardNo"/>
        <one-to-one name="person"/>
    </
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, name varchar(255), primary key (id))
alter table t_person add index FK785BED809AC0D5D6 (id), add constraint FK785BED809AC0D5D6 foreign key (id) references t_idcard (id)
mysql> desc t_idcard;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | 
int(11)      | NO   | PRI | NULL    | auto_increment |
| cardNo | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
2 rows in set (0.14 sec)
mysql> desc t_person;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | 
int(11)      | NO   | PRI | NULL    |       |
| name  | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
TestSave:
Hibernate: insert into t_idcard (cardNo) values (?)
Hibernate: insert into t_person (name, id) values (?, ?)
TestLoaded1:
Hibernate: select person0_.id as id1_0_, person0_.name as name1_0_ from t_person person0_ where person0_.id=?
person.name=孙悟空
Hibernate: select idcard0_.id as id0_1_, idcard0_.cardNo as cardNo0_1_, person1_.id as id1_0_, person1_.name as name1_0_ from t_idcard idcard0_ left outer join t_person person1_ on idcard0_.id=person1_.id where idcard0_.id=?
idCard.cardNo=88888888888888
TestLoaded2:
Hibernate: select idcard0_.id as id0_1_, idcard0_.cardNo as cardNo0_1_, person1_.id as id1_0_, person1_.name as name1_0_ from t_idcard idcard0_ left outer join t_person person1_ on idcard0_.id=person1_.id where idcard0_.id=?
idcard.cardNo=88888888888888
idcard.person.name=孙悟空

转载地址:http://tcmaa.baihongyu.com/

你可能感兴趣的文章
关于验证码识别3
查看>>
【JavaScript】javascript常用的东西
查看>>
Cucumber 入门一
查看>>
c++ 单例模式
查看>>
JAVA反射机制
查看>>
Java几款性能分析工具的对比
查看>>
SVN使用教程总结
查看>>
Chrome各个版本小常识
查看>>
阿里云图片压缩上传代码
查看>>
java关于split分割字符串,空的字符串不能得到的问题
查看>>
JavaScript函数式编程
查看>>
C++_系列自学课程_第_6_课_bitset集_《C++ Primer 第四版》
查看>>
java对象数组
查看>>
Android中使用dimen定义尺寸(转)
查看>>
Webserver管理系列:11、注意默认的隐含共享
查看>>
《学习OpenCv》 笔记(1)
查看>>
不同平台下Java环境变量的设置
查看>>
14、Java中用浮点型数据Float和Double进行精确计算时的精度问题
查看>>
[百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数
查看>>
温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
查看>>