Hibernate ManytoMany 标注级联增删改查完整操作
2015-02-05 17:29
369 查看
我们在用户和角色的概念上经常要用到多对多关系本文综合全部情况统一进行说明
实现了的操作:
- 保存新增User用户的时候保存新的Role
- 新增User用户绑定已有Role后保存关系
- 删除用户时删除跟角色的对应关系
- 只有角色没有对应任何用户的时候才能删除角色
1. 类注解
User类
说明:级联操作必须使用MERGE, 同时在保存中使用Session.merge. 否则操作中的第二条不能完成。会出现如下错误
2. DAO
另外,因为没有实现级联操作,需要在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>
实现了的操作:
- 保存新增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>
相关文章推荐
- Hibernate 多对多 删除操作(many-to-many)续
- hibernate中many-to-many基本操作
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- Hibernate中JPA的简单使用,实现简单的对表的增删改查操作
- Hibernate级联实践之二(many-to-one)
- hibernate的级联-----many-to-one
- spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)
- Hibernate注解中的manytomany级联与不级联删除问题的解决
- SpringMVC Resetful+Hibernate+MySQL实现增删改查操作
- 一个完整的hibernate的one-to-many的例子
- Hibernate中one-to-many的基本操作
- hibernate核心API和级联的增删改查(CRUD)
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- 一个完整的hibernate的one-to-many的例子
- myeclipse生成hibernate中的Many to Many操作过程
- 一个完整的hibernate的one-to-many的例子
- Hibernate工具类获取Session对象、以及简单的增删改查操作
- spring入门-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- struts2 spring4 hibernate4(s2sh)整合开发--简单实体的增删改查操作
- Hibernate在进行one-to-many时的级联设置-cascade