Hibernate 多对一与一对多关系配置(个人理解)

说明:一个作者写了多篇文章,多个文章属于一个作者

//文章类
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" 表示作者放弃外键维护权,意思就是这篇文章属不属于该作者,文章说了算,

就是当作者不放弃外键维护权的时候,文章属于谁是作者决定,当作者放弃外键维护权时,文章就有了换作者的权利




(也可能是我了解不够,就目前的了解我是这样理解的,希望了解的朋友多多评论)




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值