hinernate 一对一、一对多、多对多举例

来源:互联网 发布:手机编程前景 编辑:程序博客网 时间:2024/04/28 07:22
需求分析一:
要求一个用户可以选择多个职位
详细设置:
设置原则:
1.用户类设置:
类中包含职位属性
//多对多
/**
* @Fields dutys : 职位集合
*/
@ManyToMany(mappedBy="users",fetch=FetchType.LAZY)

private List<Duty> dutys = new ArrayList<Duty>();


2.职位类设置:
类中包含用户集合
//多对多
    @ManyToMany
    @JoinTable(name="nademo_staffduty",joinColumns = { @JoinColumn(name="dutyid")},inverseJoinColumns ={@JoinColumn(name="userid")})
    private List<User> users = new ArrayList<User>();

注意:此时:Hibernate会自动创建 nademo_staffduty表.



需求分析二:
要求一个用户对应一个用户详细 详细设置设置原则
1. 用户类中增加属性
 //一对一 
@OneToOne(cascade={ CascadeType.ALL},fetch=FetchType.LAZY)    @JoinColumn(name = "userdetailid") 
private UserDetail userDetail=new UserDetail();
需求分析三:
要求多个用户在一个部门
详细设置
设置原则
1.用户类中增加属性
//多对一
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="departmentid")
private NademoDepartment  department;
需求分析四:
要求部门呈现树状结构, 部门含有子部门
详细设置
设置原则
部门类设置:
1.类头中声明
@Entity
@Table(name = "nademo_department")
2.类中新增以下属性
private String parentid;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="parentid",insertable= false,updatable= false,nullable=false)
private NademoDepartment parentDepartment;
 @OneToMany(mappedBy="parentDepartment")
@Where(clause="isvalid=1")// 可有可无, 用于过滤可用部门
private List<NademoDepartment> child ;
需求分析五:
要求在同一张表中维护树状结构.
设置原则
以菜单类设置:
1.类中新增下面属性
@Column(nullable = false, name = "menucode")
private String menuCode;
@Column(name = "parentcode")
private String parentCode;
//单表设置关联关系
@OneToMany(mappedBy = "parentMenu", fetch = FetchType.LAZY)
@OrderBy("displayOrder")//可有可无,设置菜单显示顺序
private List<NademoMenuInfo> menuSet = new ArrayList<NademoMenuInfo>();
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parentcode", referencedColumnName = "menucode", insertable = false, updatable = false)
private NademoMenuInfo parentMenu;





0 0
原创粉丝点击