rapid 添加 多对多 步骤 (用户菜单示例)
1.Users添加 private Set<Menus> menus = new LinkedHashSet<Menus>();
2.生成getter setter
3.在getter方法上添加注解
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(joinColumns = { @JoinColumn(name = "USER_ID") }, inverseJoinColumns = { @JoinColumn(name = "MENU_ID") })
// Fecth策略定义
@Fetch(FetchMode.SUBSELECT)
// 集合按id排序.
@OrderBy("id")
4.添加非持久化属性getMenuIds方法
// 非持久化属�性.
@Transient
@SuppressWarnings("unchecked")
public List<Long> getMenuIds() throws Exception
{
return ReflectionUtils.fetchElementPropertyToList(menus, "id");
}
5.在Menus 添加 private Set<Users> users = new LinkedHashSet<Users>();
6.生成getter setter
7.在getter方法上添加多对多被引用注解 ,其中menus为Users中Menus的属性名称
@ManyToMany(mappedBy = "menus")
8.在UsersAction中 添加
private MenusManager menusManager;//通过spring自动注入
private List<Menus> allMenus; //全部可用角色列表
private List<Long> checkedMenuIds; //页面中钩选的角色id列表
9.生成getter setter
10.在action的操作方法中调用
edit()方法中
allMenus = menusManager.getAll();
checkedMenuIds = users.getMenuIds();
update()方法
HibernateWebUtils.mergeByCheckedIds(users.getMenus(), checkedMenuIds, Menus.class);
11.在页面中添加checkbox list标签
<s:checkboxlist name="checkedMenuIds" list="allMenus" listKey="id" listValue="name" theme="simple"/>