Java Hibernate 4.3.11忽略级联错误
冬眠:4.3.11 Spring Boot JPA:1.3.3 使用JPA注释 Hibernate正在级联到我试图保存并试图删除孤立对象的一个对象中的列表。当注释上没有指定cascade并且cascade opphan默认为false时,有人能解释为什么它会尝试这样做吗?我已经尝试显式地将cascasde孤立项设置为false,结果相同。下面是与注释一起保存的类 编辑:为了进一步说明,保存时对象中的列表为空,但数据库中有子记录。hibernate似乎在持久化孤立删除,因为它在表上运行SQL delete以删除列表中不包含的子记录,即使未启用级联 hibernate似乎正试图处理departmentGroupQueueList以删除孤立项Java Hibernate 4.3.11忽略级联错误,java,spring,hibernate,spring-data,Java,Spring,Hibernate,Spring Data,冬眠:4.3.11 Spring Boot JPA:1.3.3 使用JPA注释 Hibernate正在级联到我试图保存并试图删除孤立对象的一个对象中的列表。当注释上没有指定cascade并且cascade opphan默认为false时,有人能解释为什么它会尝试这样做吗?我已经尝试显式地将cascasde孤立项设置为false,结果相同。下面是与注释一起保存的类 编辑:为了进一步说明,保存时对象中的列表为空,但数据库中有子记录。hibernate似乎在持久化孤立删除,因为它在表上运行SQL de
@Accessors(chain = true) // has to come before @Getter and @Setter
@lombok.Getter
@lombok.Setter
@lombok.EqualsAndHashCode(of = {"id", "parentId"})
// @lombok.ToString()
@Entity
@Table(name="department")
public class Department implements Serializable {
@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private Integer id;
/* From Workflow Database Group, From Document Import Database Group,
* From Workflow Admin Database Group */
@ManyToOne
@JoinColumn(name = "parent_id")
private Department parentId;
/* From Workflow Admin Database Group */
@ManyToOne
@JoinColumn(name = "doc_storage_location_id", nullable = false)
private DocStorageLocation docStorageLocation;
@Column(name = "d_name", nullable = false, length = 100)
private String name;
@Column(name = "d_active", nullable = false)
private Boolean active;
@Column(name = "d_description")
private String description;
/* From Document Import Database Group, From Workflow Database Group,
* From Workflow Admin Database Group */
@OneToMany(mappedBy = "department")
private List<Doctype> doctypeList = new ArrayList<Doctype>(0);
/* From User Security Database Group */
@ManyToMany
@JoinTable(name = "department_groups", joinColumns = {@JoinColumn(name = "department_id", nullable = false)},
inverseJoinColumns = @JoinColumn(name = "group_id", nullable = false))
private List<Groups> groups = new ArrayList<Groups>(0);
/* From Workflow Admin Database Group */
@OneToMany(mappedBy = "department")
private List<DocIndexSet> docIndexSetList = new ArrayList<DocIndexSet>(0);
/* From Workflow Admin Database Group */
@OneToMany(mappedBy = "department")
private List<QueueAllowDepartment> queueAllowDepartmentsList = new ArrayList<QueueAllowDepartment>(0);
/* From User Security Database Group, From Workflow Database Group,
* From Document Import Database Group, From Workflow Admin Database Group */
@OneToMany(mappedBy = "department")
private List<Users> departmentUsersList = new ArrayList<Users>(0);
/* From Search Database Group */
@OneToMany(mappedBy = "department")
private List<SaveSearchCriteria> saveSearchCriteriaList = new ArrayList<SaveSearchCriteria>(0);
/* From Workflow Database Group */
@OneToMany(mappedBy = "department")
private List<DocAttach> docAttachList = new ArrayList<DocAttach>(0);
/* From Auditing Database Group */
@OneToMany(mappedBy = "department")
private List<AuditReason> auditReasonList = new ArrayList<AuditReason>(0);
/* From User Security Database Group */
@OneToMany(mappedBy = "department")
private List<UsersDepartment> usersDepartmentList = new ArrayList<UsersDepartment>(0);
/* From Workflow Database Group, From Document Import Database Group,
* From Workflow Admin Database Group */
/* @OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
private List<Department> subDepartmentList = new ArrayList<Department>(0);*/
/* From Document Import Database Group */
@OneToMany(mappedBy = "department")
private List<DocumentImport> documentImportList = new ArrayList<DocumentImport>(0);
/* From Workflow Admin Database Group */
@OneToMany(mappedBy = "department")
private List<Tag> departmentTagList = new ArrayList<>(0);
/* From Department Admin Database Group */
@OneToMany(mappedBy = "authorizingDept")
private List<DepartmentTrust> deptAuthorizing = new ArrayList<>(0);
/* From Department Admin Database Group */
@OneToMany(mappedBy = "authorizedDept")
private List<DepartmentTrust> deptAuthorized = new ArrayList<>(0);
@OneToMany(mappedBy = "department")
private List<DepartmentGroupsDoctype> departmentGroupsDoctypeList = new ArrayList<>(0);
@OneToMany(mappedBy = "department", orphanRemoval = false)
private List<DepartmentGroupsQueue> departmentGroupsQueueList = new ArrayList<>(0);
@OneToMany(mappedBy = "id")
private List<Department> subDepartments = new ArrayList<>(0);
}
编辑:
该应用程序正在使用Struts2 MVC框架。Department对象是由Struts在表单子委员会上创建的。下面是从表单save上运行的方法中剪下的一个片段。dao对象正在从Spring注入
public String update() {
if(getModel().getParentId().getId() == null){
getModel().setParentId(null);
}
setModel(departmentDao.update(getModel()));
return "editResult";
}
传递给update()的部门来自哪里?它是如何填充的?它使用Struts2框架,该框架通过表单的保存填充department对象。我将从Struts操作中粘贴代码,该操作将对象传递给dao。我仍在努力解决这个问题,并认为问题可能实际上存在于我的多个关联中。您需要加载和更新现有的持久性实例,即直接将传入数据绑定到从数据库加载的实例,或者将填充的实例中的值复制到持久性实例。
public String update() {
if(getModel().getParentId().getId() == null){
getModel().setParentId(null);
}
setModel(departmentDao.update(getModel()));
return "editResult";
}