hibernate多对多问题(小细节)
来源:互联网 发布:c语言编程实例100题 编辑:程序博客网 时间:2024/06/10 11:20
Hibernate多对多 我这里是 学生和权限之间的关系:一个学生有好多权限,一个权限也可以属于好多学生(只是想模拟一下hibernate的多对多),
package com.zsq.Ssh_OA.model;import java.io.Serializable;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import org.apache.struts2.json.annotations.JSON;import org.hibernate.annotations.Cascade;@Entitypublic class MenuItem implements Serializable {private Long mid;private Long pid;// 父节点IDprivate String name;// 树上的节点的名称private Boolean isParent;// 是否为文件夹节点private String icon;// 图标图片的路径private Boolean checked;private String url;private String target;private Set<Student> students;@Id@GeneratedValuepublic Long getMid() {return mid;}public void setMid(Long mid) {this.mid = mid;}public Long getPid() {return pid;}public void setPid(Long pid) {this.pid = pid;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Boolean getIsParent() {return isParent;}public void setIsParent(Boolean isParent) {this.isParent = isParent;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public Boolean getChecked() {return checked;}public void setChecked(Boolean checked) {this.checked = checked;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getTarget() {return target;}public void setTarget(String target) {this.target = target;}@JSON(serialize=false)@ManyToMany(mappedBy="menuItems")public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}}
这是student:package com.zsq.Ssh_OA.model;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;@Entitypublic class Student implements Serializable {private int id;private String name;private String password;private String sex;private int age;private Set<MenuItem> menuItems = new HashSet<MenuItem>();@Id@GeneratedValuepublic int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@ManyToMany@JoinTable(name="MenuIten_Student",joinColumns={@JoinColumn(name="id")},inverseJoinColumns={@JoinColumn(name="mid")})public Set<MenuItem> getMenuItems() {return menuItems;}public void setMenuItems(Set<MenuItem> menuItems) {this.menuItems = menuItems;}}
这样配置是正确的,我这里把Student作为参照类,也就是说以student为主。
下面的代码是对 数据库的更新操作
public String SavePrivilege(){System.out.println("uid:"+uid+ "....ids"+mids); Student s=this.studentService.getStudentById(uid);int [] ids=UtilOA.getInt(mids);Set<MenuItem> items=menuItemService.getByIDS(ids);/*for(MenuItem m:items){m.getStudents().add(s); //mappedBy 以menuitem为主,设置在menuitem里面menuItemService.updateMenuItem(m);System.out.println("....."+m.getMid()+"/"+m.getName()+"/"+m.getIcon()+"/ "+m.getPid()+"/"+m.getChecked()+"/"+m.getIsParent()); }*/s.setMenuItems(items);//mappedBy 以student为主,设置在student里面this.studentService.updateStudent(s);return SUCCESS;
这个是我验证后正确的做法,
我的错误做法是 在Student类里面配置的是@JoinTable(...) ,而在MenuItem里面配置的是Mappedby="students",我原本是想以Student为主的,这样我直接 按红色把student和menuitem关联然后存储student就行了(因为是以student为主),但是我的错误做法---将menuitem作为的参考类,然后直接更新student,后台不报错也不更新,我搞了好长时间,才觉得自己的表生成的有问题。
然后就有了上述的正确代码,
有点乱,写之记录记录。。。
0 0
- hibernate多对多问题(小细节)
- hibernate hql 多表关联一个小细节
- Hibernate小细节
- Hibernate 多对多小案例
- Hibernate多对多的小案例
- Hibernate 多对一小案例
- Hibernate多对一小案例
- Spring与Hibernate整合小细节与测试问题
- 使用Hibernate多对一关联表出现的小问题
- hibernate中的配置小细节
- servlet小细节问题
- Hibernate (单向)多对多的更新问题!
- Hibernate (单向)多对多的更新问题
- 多对多删除问题 Spring+Hibernate
- hibernate一对多,多对一问题
- hibernate多对一查询问题
- hibernate的多对一问题
- hibernate多对一应注意的问题
- 网狐6603数据库异常:在对应所需名称或序数的合集中,未找到项目
- SQL附加数据库错误,错误5123
- 网狐6603EWIN服务器连接失败,请检查网络配置及网络连接状况
- 源码分析NGUI的DrawCall合并原理
- 两种视角下的金字塔
- hibernate多对多问题(小细节)
- 三种找回 linux root密码的方法
- PHP通过IP 获取 地理位置(转)
- Linux大量TIME_WAIT如何解决
- 《黑马程序员》 类加载文件和类加载器加载文件
- C++实现查找数组中的值
- ora-12541:TNS:无监听程序”问题的解决
- 计算机视觉数据集
- OSX: Mac不睡眠的排查