public class Posts{ //文章
private int id;
private String name;
private String userid;
private User author;
set/get;
}
public class User{ //用户(作者)
private int id;
private String name;
}
<Post.hbm.xml>
<!-- 多方无法放弃外键维护权,所以不存在inverse,设置级联保存 -->
<many-to-one name="author" class="cn.test.domain.User" lazy="false" cascade="save-update" >
<column name="user_id" ></column>
</many-to-one>
讲解:
对应的两张表中必须有相应的外键关系,
author:既是指Posts类中的属性,用来存储关联的User对象
User:指User类
user_id:指的是User类对应的表中的外键(不是指类中的属性名,是表中的字段名),这里非常重要,我在这里迷惑了好久
在User类中有userid对应表中的user_id,但是写的是user_id,因为前面也写了,column指的就是字段
lazy:这个属性是指当加载父关联时是否要同时加载子关联,如果取 true 就是查询 Post (文章)时会同时把对应的 User (作者)加载进内存
如果取 false 那就是不会同时加载进内存,当使用到User对象时再加载,但是要保证 session 没有关闭
默认值为ture,延迟加载
inverse:放弃外键维护权,在多的一方中,默认为false,不能放弃外键维护
在一的一方中可以选择放弃外键维护,开发中也是这么做的