Hibernate 级联删除失败问题
来源:互联网 发布:python 英文分词 编辑:程序博客网 时间:2024/05/29 02:52
要求:通过删除一个部门,级联删除它的所有下级部门
部门实体:Department.java
import java.util.HashSet;import java.util.Set;/** * 部门管理 * @author Administrator * */public class Department { private Long id;//部门id private String name;//部门名称 private String description;//部门描述 private Set<User> users = new HashSet<User>();//用户 private Department parent;//上级部门 private Set<Department> children = new HashSet<Department>();//下级部门 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Department getParent() { return parent; } public void setParent(Department parent) { this.parent = parent; } public Set<Department> getChildren() { return children; } public void setChildren(Set<Department> children) { this.children = children; } public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } }
部门映射文件Departmetn.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.sinosoft.test.domain"> <class name="Department" table="test_department"> <id name="id"> <generator class="native"/> </id> <property name="name"></property> <property name="description"></property> <!-- users属性,本类与User的一对多关系 --> <set name="users"> <key column="departmentId"></key> <one-to-many class="User"/> </set> <!-- parent属性,本类与Department(上级)的多对一关系 --> <many-to-one name="parent" class="Department" column="parentId"></many-to-one> <!-- children属性,本类与Department(下级)的一对多关系 cascade = "delete" 级联删除子部门,即当删除某部门连同删除其所有子部门 --> <set name="children" cascade="all-delete-orphan"> <key column="parentId"></key> <one-to-many class="Department"/> </set> </class></hibernate-mapping>
DepartmentAction.java
package com.sinosoft.test.view.action;import java.util.List;import javax.annotation.Resource;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import com.sinosoft.test.domain.Department;import com.sinosoft.test.service.DepartmentService;@Controller@Scope("prototype")public class DepartmentAction extends ActionSupport implements ModelDriven<Department> { @Resource private DepartmentService departmentService; private Long parentId; private Department model = new Department(); public Department getModel() { return model; } public void setModel(Department model) { this.model = model; } /**部门列表*/ public String list() throws Exception{ List<Department> departmentList = departmentService.findAll(); ActionContext.getContext().put("departmentList", departmentList); return "list"; } /**添加页面*/ public String addUI() throws Exception{ //准备数据 List<Department> departmentList = departmentService.findAll(); ActionContext.getContext().put("departmentList", departmentList); return "addUI"; } /**添加*/ public String add() throws Exception{ //封装对象到表单中 Department parent = departmentService.getById(parentId); model.setParent(parent); departmentService.save(model); return "toList"; } /**修改页面*/ public String editUI() throws Exception{ //准备数据departmentList List<Department> departmentList = departmentService.findAll(); ActionContext.getContext().put("departmentList", departmentList); //准备回显数据 Department department = departmentService.getById(model.getId()); ActionContext.getContext().getValueStack().push(department); if(department.getParent() != null){ parentId = department.getParent().getId(); } return "editUI"; } /**修改*/ public String edit() throws Exception{ //从数据库中取出原对象 Department department = departmentService.getById(model.getId()); //设置要修改的属性 department.setName(model.getName()); department.setDescription(model.getDescription()); department.setParent(departmentService.getById(parentId)); departmentService.update(department); return "toList"; } /**删除*/ public String delete() throws Exception{ if(model.getId() != null){ Department department = departmentService.getById(model.getId()); departmentService.delete(department); } return "toList"; } // public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; }}
在我第一次操作时,没有级联成功,只删除了部门记录,没有级联删除该部门的所有下级部门的记录。最后找到原因是我在DepartmentAction.java中的delete()操作错误。
第一次操作代码:
/**删除*/ public String delete() throws Exception{ departmentService.delete(model); } return "toList"; }
修改后:
/**删除*/ public String delete() throws Exception{ if(model.getId() != null){ Department department = departmentService.getById(model.getId()); departmentService.delete(department); } return "toList"; }
错误原因是,因为我第一次删除的Model中只有页面传过来本部门的id,没有要删除的子部门信息,故不能删除,所以需要通过id先把该对象加载进来如下:
Department department = departmentService.getById(model.getId());
其它情况待补充。。。。
0 0
- Hibernate 级联删除失败问题
- Hibernate级联删除失败问题
- hibernate 级联删除报更新失败的问题
- hibernate级联删除问题
- Hibernate级联删除问题
- Hibernate级联删除提示约束失败DELETE
- hibernate 级联删除的问题
- 删除级联hibernate级联删除
- hibernate中关于级联删除的问题
- Hibernate删除时的级联问题
- Hibernate级联删除
- Hibernate实现级联删除
- Hibernate的级联删除
- Hibernate实现级联删除
- Hibernate 级联删除
- hibernate级联删除
- Hibernate 级联删除
- hibernate级联删除
- django 设置 数据库缓存
- 文件访问权限
- 万年历
- Android 按钮点击两次触发不同的事件
- SQLite安装及在Visual studio 2010(VS2010)中的使用
- Hibernate 级联删除失败问题
- Select For Update行级锁定
- Matlab--统计图的绘制
- LeetCode_124Binary Tree Maximum Path Sum
- HDU - 5301(构造)
- hdu 2199~Can you solve the equation?~二分法求解
- 基本控件之UIScrollView
- 静态查找与动态查找结构
- java遍历HashMap