Hibernate ManytoMany 标注级联增删改查完整操作
来源:互联网 发布:单身狗 知乎 编辑:程序博客网 时间:2024/06/16 08:47
我们在用户和角色的概念上经常要用到多对多关系本文综合全部情况统一进行说明
实现了的操作:
- 保存新增User用户的时候保存新的Role
- 新增User用户绑定已有Role后保存关系
- 删除用户时删除跟角色的对应关系
- 只有角色没有对应任何用户的时候才能删除角色
1. 类注解
User类
@ManyToMany(cascade={CascadeType.MERGE}) @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "USER_ID"), inverseJoinColumns = @JoinColumn(name = "ROLE_ID")) private Set<Role> roles =new HashSet<Role>();@ManyToMany(mappedBy="roles") public Set<User> users;
说明:级联操作必须使用MERGE, 同时在保存中使用Session.merge. 否则操作中的第二条不能完成。会出现如下错误
session.saveOrUpdate(session.merge(user));org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: com.***;
2. DAO
public void addUser(User user) { System.out.println("-------getinto UserDao--------"); session=sessionFactory.getCurrentSession(); //session.saveOrUpdate(session.merge(user)); session.merge(user);}public void deleteUserById(int userID) { session=sessionFactory.getCurrentSession(); User user=(User) session.get(User.class, userID); session.delete(user);}public void deleteRolebyId(int id) { session=sessionFactory.getCurrentSession(); Role role=(Role) session.get(Role.class, id); session.delete(role);}
另外,因为没有实现级联操作,需要在web.xml中使用OpenSessionInView
<!-- Open Seesion in View -->
<filter><filter-name>openSessionInView</filter-name><filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSessionInView</filter-name><url-pattern>/*</url-pattern></filter-mapping>
0 0
- Hibernate ManytoMany 标注级联增删改查完整操作
- hibernate级联增删改查
- hibernate One2Many级联增删改查
- hibernate 增删改查操作
- Hibernate 增删改查操作
- Hibernate增删改查操作
- hibernate核心API和级联的增删改查(CRUD)
- Hibernate级联及控制反转的增删改查
- Hibernate 一对一关联映射对象 级联增删改查示例
- Hibernate基本增删改查操作
- Hibernate 实体基本增删查改操作
- Hibernate 基本增删改查操作
- Hibernate 批量增删改查操作
- Hibernate 批量增删改查操作
- Hibernate之Session增删改查操作
- hibernate基本操作增删改查
- Hibernate---curd(增删查改)操作
- 数据库中数据增删查改可能的级联操作
- 黑马程序员——c语言学习---选择结构
- 关于matlab中 CC = bwconncomp(A,4)命令的问题
- Ubuntu下解决Android Stiudio更新SDK问题
- 正则表达式入门教程
- u)dym)l$_@3*0y3u_pvy@34ky1co1j$lfd1wp-w*8x%30@f7t$
- Hibernate ManytoMany 标注级联增删改查完整操作
- SIFT特征提取及应用
- iOS 上常用的两个功能:点击屏幕和return退出隐藏键盘和解决虚拟键盘挡住UITextField的方法
- java工具使用-01-使用commons.lang3生成随机的20位的订单号
- NIO与传统IO的区别
- Xcode 6制作动态及静态通用Framework(解决不支持 armv7s arm64 armv7)
- 理解REST的概念
- onRestart执行时机。
- Go 语言的并发模型--通过通信来共享内存