知识大全 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一对多单向关系 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
Hibernate一对一主键关联映射 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
模型User—Name(两者同属一张表中) Java代码 packageDomain; importjavautilDate; publicclassUser publicintgetI
模型员工Employee—部门Department Java代码 packageDomain; publicclassEmployee publicintgetId() returnid
我现在有一个借阅信息类如下 classBorrow privateStringborrowId;//借阅流水 privateBookbook; privateUserborrowUser;
Hibernate单向一对多注意的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这个问题困
Hibernate多对多双向关联(xml配置) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Hibernate一对多双向映射及乐观锁使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在H
一对象关系映射基础 对象间的基本关系 首先我简要阐明一下对象之间的基本关系在这以后UML的课程中也会深入的学习对象具有的四种基本关系 关联关系关联关系在设计模式中是被提倡优先使用于继承关系的
Hibernate初学之一对多、多对一关系模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 举