Hibernate 多对一与一对多关系配置(个人理解)
2017-10-13 19:24
281 查看
说明:一个作者写了多篇文章,多个文章属于一个作者
----------------以上为xxx.hbm.xml 文件中的关系配置,其他省略
lazy:延迟
默认值:true,(默认全部都是延迟加载)
延迟加载机制:会先返回一个代理对象,当真正使用到该对象的某些属性时才会通过之前的那个session去数据库查询数据
所以,要想使用延迟加载,必须保证当你使用数据时session没有关闭,如果session关闭会出现no session 异常,其实就是
延迟加载后回头加载数据时,原来的那个session关闭了的原因。
这里是当父连接加载时同时加载子连接,true代码加载父连接时不加载子连接,当使用到子连接时再去加载,
不过要保证session 没有关闭
多对一和一对多只能存在有一个设置 lazy="false" 延迟加载,不然会产生无限死循环
当然,就算都设置了延迟加载,当调用打印的时候还是有可能进入死循环,尤其当JavaBean都重新了toString方法的时候
级联:
cascade="delete"
在作者的关系配置文件中设置表示,级联删除,当删除一个作者时,会级联删除属于这个作者的所有文章。
cascade:有两种取值
save-update -- 级联保存和更新
delete -- 级联删除
二者可以同时使用,cascade="save-update,delete"
放弃外键维护权:
inverse
取值:默认为false
true -- 放弃外键维护权
false -- 不放弃外键维护权
在作者的配置文件中,inverse="true" 表示作者放弃外键维护权,意思就是这篇文章属不属于该作者,文章说了算,
就是当作者不放弃外键维护权的时候,文章属于谁是作者决定,当作者放弃外键维护权时,文章就有了换作者的权利
(也可能是我了解不够,就目前的了解我是这样理解的,希望了解的朋友多多评论)
$(".MathJax").remove();
//文章类 class Posts{ private String pid; private String pname; private String content; private User author; get/set; } //作者类 class User { private String uid; private String uname; private Set<Posts> posts ; get/set; } //多对一的配置格式(多个文章对应同一个作者),文章的关系配置文件 <many-to-one name="author" class="cn.test.User" > <column name="uid"></column> //这里对应多的一方的数据库表中的外键字段名 </many-to-one> //一对多的配置格式(一个作者对应多个文章),作者的关系配置文件 <set name="posts" cascade="delete" inverse="true" > <key column="uid" ></key>//这里对应的也是多的一方的数据库表中的外键字段名 <one-to-many class="cn.test.Posts" /> </set>
----------------以上为xxx.hbm.xml 文件中的关系配置,其他省略
lazy:延迟
默认值:true,(默认全部都是延迟加载)
延迟加载机制:会先返回一个代理对象,当真正使用到该对象的某些属性时才会通过之前的那个session去数据库查询数据
所以,要想使用延迟加载,必须保证当你使用数据时session没有关闭,如果session关闭会出现no session 异常,其实就是
延迟加载后回头加载数据时,原来的那个session关闭了的原因。
这里是当父连接加载时同时加载子连接,true代码加载父连接时不加载子连接,当使用到子连接时再去加载,
不过要保证session 没有关闭
多对一和一对多只能存在有一个设置 lazy="false" 延迟加载,不然会产生无限死循环
当然,就算都设置了延迟加载,当调用打印的时候还是有可能进入死循环,尤其当JavaBean都重新了toString方法的时候
级联:
cascade="delete"
在作者的关系配置文件中设置表示,级联删除,当删除一个作者时,会级联删除属于这个作者的所有文章。
cascade:有两种取值
save-update -- 级联保存和更新
delete -- 级联删除
二者可以同时使用,cascade="save-update,delete"
放弃外键维护权:
inverse
取值:默认为false
true -- 放弃外键维护权
false -- 不放弃外键维护权
在作者的配置文件中,inverse="true" 表示作者放弃外键维护权,意思就是这篇文章属不属于该作者,文章说了算,
就是当作者不放弃外键维护权的时候,文章属于谁是作者决定,当作者放弃外键维护权时,文章就有了换作者的权利
(也可能是我了解不够,就目前的了解我是这样理解的,希望了解的朋友多多评论)
$(".MathJax").remove();
相关文章推荐
- 浅谈hibernate中多表映射关系配置
- hibernate对象关系映射的配置
- Hibernate 的关系与配置
- VC++ 内存机理的个人理解(一)——地址和指针的关系
- hibernate多对多的关系映射配置
- Hibernate建立关系配置(hbm.xml)bag中cascade属性
- hibernate 注解配置一对多关系简单实例
- Spring中的packagesToScan的方式配置hibernate的class文件映射规则的理解
- hibernate 对应关系配置
- 关于hibernate的关系映射的问题一些理解和笔记
- 7.10.2: 深入理解依赖关系配置---注入其他Bean的Field值
- Hibernate flush 和 hibernate.jdbc.batch_size 配置大小的关系(附Hibernate源代码分析)
- STM32中PWM频率捕获的相关配置(个人理解)
- 持久化对象的状态、Hibernate配置文件、映射对象标识符 、 映射组成关系 、 Hibernate把持久话类的属性分为两种
- hibernate的一对多的关系配置
- Hibernate 关系配置(一对一,一对多)
- Hibernate 关系配置(一),单表的基本配置
- hibernate映射关系理解
- Hibernate中继承关系注解配置
- MVC和三层架构的关系(个人理解)