博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
08hibernate_one2one_ufk_2
阅读量:5914 次
发布时间:2019-06-19

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

hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard)
public 
class Person {
    
private 
int id;
    
    
private String name;
    
    
private IdCard idCard; 
--------------------------------------------------------------------------------------------
public 
class IdCard {
    
    
private 
int id;
    
    
private String cardNo;
    
    
private Person person;    
--------------------------------------------------------------------------------------------
<hibernate-mapping>
    <
class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
        <id name="id">
            <generator 
class="native"/>
        </id>
        <property name="cardNo"/>
        
        <!--
       
 一对一唯一外键关联双向,需要在(idcard)端,添加one2one标签,
        指示hibernate如何加载其关联对象,默认根据主键加载person,
        此时,在外键关联映射中,因为两个实体采用的是person的外键维护的关系,
        所以不能指定主键加载person,而要根据person的外键idCard加载,所以采用如下映射方式

        -->
        
<one-to-one name="person" 
property-ref="idCard"/>
    </
class>
</hibernate-mapping>
<hibernate-mapping>
    <
class name="com.bjsxt.hibernate.Person" table="t_person">
        <id name="id">
            <generator 
class="native"/>
        </id>
        <property name="name"/>
        <
many-to-one name="idCard" unique="true"/>
    </
class>
</hibernate-mapping>
--------------------------------------------------------------------------------------------
public 
void testSave() {
        Session session = 
null;
        
try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            
            IdCard idCard = 
new IdCard();
            idCard.setCardNo("88888888888888");
            session.save(idCard);
            
            Person person = 
new Person();
            person.setName("菜10");
            person.setIdCard(idCard);
            
            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, 2);
            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);
        }
    }    
--------------------------------------------------------------------------------------------    
一对一唯一外键关联双向,需要在另一端(idcard),添加<one-to-one>标签,指示hibernate如何加载
其关联对象,默认根据主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,
所以不能指定主键加载person,而要根据person的外键加载,所以采用如下映射方式:
<one-to-one name="person" property-ref="idCard"/>
由于没有改变数据库结构,不象many-to-one会往数据库中加字段,所以,我们还是使用的07hibernate_one2one_ufk_1,而
没有去重新导入
一个新的表和数据库08hibernate_one2one_ufk_2
--------------------------------------------------------------------------------------------
testLoad1
Hibernate: select person0_.id as id1_0_, person0_.name as name1_0_, person0_.idCard as idCard1_0_ from t_person person0_ where person0_.id=?
person.name=菜10
Hibernate: select idcard0_.id as id0_1_, idcard0_.cardNo as cardNo0_1_, person1_.id as id1_0_, person1_.name as name1_0_, person1_.idCard as idCard1_0_ from t_idcard idcard0_ left outer join t_person person1_ on idcard0_.id=person1_.idCard where idcard0_.id=?
Hibernate: select person0_.id as id1_0_, person0_.name as name1_0_, person0_.idCard as idCard1_0_ from t_person person0_ where person0_.idCard=?
idCard.cardNo=88888888888888
testLoad2:
Hibernate: select idcard0_.id as id0_1_, idcard0_.cardNo as cardNo0_1_, person1_.id as id1_0_, person1_.name as name1_0_, person1_.idCard as idCard1_0_ from t_idcard idcard0_ left outer join t_person person1_ on idcard0_.id=person1_.idCard where idcard0_.id=?
idcard.cardNo=88888888888888
idcard.person.name=菜10

转载于:https://www.cnblogs.com/alamps/archive/2012/08/02/2620241.html

你可能感兴趣的文章
Bzoj4289: PA2012 Tax
查看>>
select 1 与 select null
查看>>
iOS 关于信鸽推送点击推送通知的处理
查看>>
通过Xode上传代码到GIthub---步骤
查看>>
ES6数组扩展
查看>>
用lua_tinker将lua脚本嵌入到游戏服务器
查看>>
stark组件之过滤操作【模仿Django的admin】
查看>>
Color对应值
查看>>
【mysql】逗号分割字段的行列转换
查看>>
第四次作业——测试作业
查看>>
发布二手房,上传图片,带水印,可一次性上传多张.。在前台及后台中取 web.config 中的key值...
查看>>
今拾到了个联合查询, 琢磨了好几个小时, 标记一下
查看>>
Oracle EBS-SQL (CST-2):检查有BOM但成本不基于累积的数据.sql
查看>>
openSUSE虚拟机安装并连接Xshell
查看>>
基于NKN的分布式Pub / Sub服务
查看>>
今天又学习了
查看>>
惊!西游记内幕竟是这样的。
查看>>
iOS - GeoCoder 地理编码
查看>>
Microsoft Fakes
查看>>
EventLoop的设计
查看>>