hibernate报错:
org.springframework.dao.InvalidDataAccessApiUsageException:
deleted object would be re-saved by cascade (remove deleted object from associations): [org.herysoft.framework.sys.domain.Resource#1105];
nested exception is org.hibernate.ObjectDeletedException:
deleted object would be re-saved by cascade (remove deleted object from associations): [org.herysoft.framework.sys.domain.Resource#1105]
ORA-02292: 违反完整约束条件 已找到子记录
也可以用以下方案解决
解决:
以上错误由于hibernate关联关系没有配置正确导致,下面描述下正确配置
这是主表,关联了两个外键role和resource,在其引用处添加*@ManyToOne*的注解,注意不要加Cascade级联属性,因为主表的数据删除不会引发外键表的数据变动
public class RoleResource extends AbstractPersistence {
private Integer key;
private Role role;
private Resource resource;
@Id
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "SEQ_SYS_RBAC_ROLE_RES", allocationSize = 1, initialValue = 1)
@GeneratedValue(generator = "sequenceGenerator", strategy = GenerationType.SEQUENCE)
@Column(name = "ID")
public Integer getKey() {
return key;
}
@ManyToOne
public Role getRole() {
return role;
}
@ManyToOne
public Resource getResource() {
return resource;
}
public void setKey(Integer key) {
this.key = key;
}
public void setRole(Role role) {
this.role = role;
}
public void setResource(Resource resource) {
this.resource = resource;
}
}
这是其中一张外键表,这里要配置对主表的双向关联,声明private Set<RoleResource> roleResource = new HashSet<RoleResource>() ;
属性,注解写上@JsonIgnore
和 @OneToMany(mappedBy = "role", cascade = CascadeType.ALL)
,这里要设置级联属性,确保删除子表数据时,级联删除主表的数据;JsonIgnore是防止在对对象做一些json转换时出错
public class Role extends AbstractPersistence {
private Integer key;
private Set<RoleResource> roleResource = new HashSet<RoleResource>() ;
@Id
@Column(name = "ID")
public Integer getKey() {
return key;
}
@JsonIgnore
@OneToMany(mappedBy = "role", cascade = CascadeType.ALL)
public Set<RoleResource> getRoleResource() {
return roleResource;
}
public void setRoleResource(Set<RoleResource> roleResource) {
this.roleResource = roleResource;
}
}