Hibernate 一对一 之主键关联

简介:
2个 相关联的配置文件分别为:
Tuser.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 package="com.randy.connection"
  <class name="Tuser" table="t_user"
    <id name="id"
    <generator class="foreign"
      <param name="property">passport</param> 
    </generator> 
    </id> 
    <property name="age" /> 
    <property name="name"/> 
     
    <one-to-one name="passport" cascade="all" class="Tpassport" constrained="true"/> 
  </class
    
    
</hibernate-mapping>
 
Tpassport.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 package="com.randy.connection"
  <class name="Tpassport" table="t_passport"
    <id name="id"
      <generator class="native" /> 
    </id> 

    <property name="serial" /> 
     
  </class
    
    
</hibernate-mapping> 
执行的代码
   public  void testSelect(){ 
    String hql = "from Item"
    List userlist = session.createQuery(hql).list(); 
  }
 
输出的sql
 select tuser0_.id   as id0_0_,
        tuser0_.age  as age0_0_,
        tuser0_.name as name0_0_
   from t_user tuser0_
  where tuser0_.id = ?
----------------------------------------
 select tpassport0_.id as id1_0_, tpassport0_.serial as serial1_0_
   from t_passport tpassport0_
  where tpassport0_.id = ?
 
 
共2条SQL 语句
 
实验:
当把 Tuser.hbm.xml文件中<one-to-one>标签中的contained="true"去掉了
输出的sql:
 select tuser0_.id         as id0_1_,
        tuser0_.age        as age0_1_,
        tuser0_.name       as name0_1_,
        tpassport1_.id     as id1_0_,
        tpassport1_.serial as serial1_0_
   from t_user tuser0_
   left outer join t_passport tpassport1_ on tuser0_.id = tpassport1_.id
  where tuser0_.id = ?
 
一条sql语句。
 
测试代码:
   public  void testDelete(){ 
    Transaction tc =  null
     try{        
      tc = session.beginTransaction(); 
      Tuser user =(Tuser)session.load(Tuser. class, 5); 
       //Tuser user = new Tuser(); 
     //  user.setId(3); 
      session.delete(user); 
        
      tc.commit(); 
    } catch(HibernateException e){ 
      tc.rollback(); 
      e.printStackTrace(); 
    } 
  }
 
这里的load() 可以替换为get()
1.当Tuser.hbm.xml 中one-to-one 标签中的casecade="true"的时候
输出 2条sql
delete from t_user where id=?
delete from t_passport where id=?
 
2.当Tuser.hbm.xml 中one-to-one 标签中的casecade="false"的时候
只输出一条sql
delete from t_user where id=?
 
测试代码:
   public  void testDelete(){ 
    Transaction tc =  null
     try{        
      tc = session.beginTransaction(); 
      Tuser user =  new Tuser(); 
      user.setId(3); 
      session.delete(user); 
        
      tc.commit(); 
    } catch(HibernateException e){ 
      tc.rollback(); 
      e.printStackTrace(); 
    } 
  }
 
 
1.当Tuser.hbm.xml 中one-to-one 标签中的casecade="false"的时候
 
输出一条sql
delete from t_user where id=?
2.当Tuser.hbm.xml 中one-to-one 标签中的casecade="false"的时候
delete from t_user where id=?
 
太奇怪了,失效了casecade 属性没用了。



本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/245945,如需转载请自行联系原作者
相关文章
|
6月前
|
SQL Java 数据库连接
Hibernate -双向一对一关联关系映射
Hibernate -双向一对一关联关系映射
54 0
|
XML 存储 Java
Hibernate框架【三】——基本映射——一对一映射
Hibernate框架【三】——基本映射——一对一映射
79 0
|
XML Java 数据库连接
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
67 0
《Hibernate上课笔记》-----class5----Hibernate实现一对一关联映射
|
SQL Java 数据库连接
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
  接着上篇文章,唯一外键关联,就是给一对一关联关系中某个对象加一个外键。比如这里给t_person表添加一个外键,指向t_idcard的主键,并且规定t_person中的外键idCard唯一,也可以达到一对一映射的效果。
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
|
SQL Java 数据库连接
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——主键关联映射
 现实生活中,有很多场景需要用到一对一映射,比如每个学生只有一个学生证,每个公民只有一张身份证等。这里用公民-身份证来举例说明。
【SSH快速进阶】——Hibernate一对一映射(one-to-one)——主键关联映射
|
SQL Java 数据库连接
Hibernate的一对一映射(八)
Hibernate的一对一映射(八)
113 0
Hibernate的一对一映射(八)
|
SQL NoSQL Java
hibernate(五) hibernate一对一关系映射详解
之前讲解了一对多(单向、双向)、多对多(双向),今天就讲解一下最后一个关系,一对一。 心情不错。状态也挺好的,赶紧写一篇博文造福一下大家把。  
285 0
|
Java 数据库连接
Hibernate一对一、一对多、多对多注解映射配置
一对一:   一对多:   多对多: 作者: Candyメ奶糖 出处:http://www.cnblogs.com/Candies/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
893 0
|
SQL Java 数据库连接
hibernate笔记--基于外键的单(双)向的一对一映射关系
  假设我们有两张表,人员信息表Person,和身份信息表IdCard,我们知道每个人只有一个身份证号,所以这里的Person和IdCard表是一一对应的,也就是一对一的映射关系,基于外键的单向一对一映射关系,只需要在单向多对一的映射关系的多的一端的配置文件的标签中添加一个unique="true"...
870 0
|
Java 数据库连接
hibernate笔记--基于主键的单(双)向的一对一映射关系
  上一节介绍的基于外键的一对一映射关系中,在Person表中有一个外键列idCard_id,对应的idCard表的主键id,至于基于主键的一对一映射关系,就是指Person表中抛弃了idcard_id这个外键列,而与idCard表共用一个主键,或者说是其外键为主键的表结构,这种基于主键的双向一对一...
907 0