知识大全 hibernate一对多关联关系

Posted 语句

篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate一对多关联关系相关的知识,希望对你有一定的参考价值。

  想了几天 终于知道sql语句的发出问题 查了很多书 感觉都没有说清楚 有的还是错的 请看下面

  [java]

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= bjpowernode hibernate Classes table= t_classes >

  <id name= id >

  <generator class= native />

  </id>

  <property name= name />

  <set name= students cascade= save update >

  <!

  <key column= classesid not null= true />

   >

  <key column= classesid />

  <one to many class= bjpowernode hibernate Student />

  </set>

  </class>

  </hibernate mapping>

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= bjpowernode hibernate Classes table= t_classes >

  <id name= id >

  <generator class= native />

  </id>

  <property name= name />

  <set name= students cascade= save update >

  <!

  <key column= classesid not null= true />

   >

  <key column= classesid />

  <one to many class= bjpowernode hibernate Student />

  </set>

  </class>

  </hibernate mapping>

  [java]

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= bjpowernode hibernate Student table= t_student >

  <id name= id >

  <generator class= native />

  </id>

  <property name= name />

  <many to one name= classes column= classesid cascade= save update />

  </class>

  </hibernate mapping>

  <?xml version= ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= bjpowernode hibernate Student table= t_student >

  <id name= id >

  <generator class= native />

  </id>

  <property name= name />

  <many to one name= classes column= classesid cascade= save update />

  </class>

  </hibernate mapping>

  测试的语句

  [java]

  session = HibernateUtils getSession();

  session beginTransaction();

  Student student = new Student();

  student setName( 张三 );

  Classes classes = new Classes();

  classes setName( 动力节点 );

  student setClasses(classes);

  //Set students = new HashSet();

  //students add(student );

  classes getStudents() add(student );

  //抛出TransientObjectException

  //因为Student不是Persistent状态的对象 它是Transient状态的对象

  session save(classes);

  session = HibernateUtils getSession();

  session beginTransaction();

  Student student = new Student();

  student setName( 张三 );

  Classes classes = new Classes();

  classes setName( 动力节点 );

  student setClasses(classes);

  //Set students = new HashSet();

  //students add(student );

  classes getStudents() add(student );

  //抛出TransientObjectException

  //因为Student不是Persistent状态的对象 它是Transient状态的对象

  session save(classes);

  Hibernate: insert into t_classes (name) values (?)

  Hibernate: insert into t_student (name classesid) values (? ?)

  Hibernate: update t_student set classesid=? where id=?

  问题一 既然是两端维持关系 为什么不发出

  Hibernate: insert into t_classes (name) values (?)

  Hibernate: insert into t_student (name classesid) values (? ?)

  而是发出三条语句呢?

  答 我猜想内部机制 当它发现session save(classes)时 也就是保存一的一端的时候 他会使用一的一端来维持关系 这时候student setClasses(classes);这句话就不管了 所以此时Hibernate: insert into t_student (name classesid) values (? ?)中的那个字段还是为空 它看不到关系 (孙卫琴老师的精通hibernate这本书这个地方说发出两条sql语句是错误的)

  当保存多的一端的时候 他会使用多的一端来维持关系 这时候classes getStudents() add(student );这句话就不管了 此时它能够看到student setClasses(classes);所以保存Hibernate: insert into t_student (name classesid) values (? ?)中的那个字段不会为空 它能够看到关系

  总结一句话 保存一的一端会发出多条update的语句 而保存多的一端不会发出多条update的语句(尽管是两端维持关系 但是会只用一端控制机制)

  问题二 级联保存的时候 是先保存多的一端还是先保存一的一端呢?

cha138/Article/program/Java/ky/201311/28603

相关参考

知识大全 Hibernate一对多单向关系

Hibernate一对多单向关系  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   &n

知识大全 Hibernate一对一 主键关联映射

Hibernate一对一主键关联映射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 hibernate关联关系-组件关联

  模型User—Name(两者同属一张表中)  Java代码  packageDomain;  importjavautilDate;  publicclassUser  publicintgetI

知识大全 hibernate关联关系-多对一

  模型员工Employee—部门Department  Java代码  packageDomain;  publicclassEmployee  publicintgetId()  returnid

知识大全 hibernate的关联关系配置问题

  我现在有一个借阅信息类如下  classBorrow  privateStringborrowId;//借阅流水  privateBookbook;  privateUserborrowUser;

知识大全 Hibernate单向一对多注意的问题

Hibernate单向一对多注意的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这个问题困

知识大全 Hibernate多对多双向关联(xml配置)

Hibernate多对多双向关联(xml配置)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Hibernate一对多双向映射及乐观锁使用

Hibernate一对多双向映射及乐观锁使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在H

知识大全 hibernate关系映射

  一对象关系映射基础  对象间的基本关系  首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系  关联关系关联关系在设计模式中是被提倡优先使用于继承关系的

知识大全 Hibernate初学之一对多、多对一关系模型

Hibernate初学之一对多、多对一关系模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  举