@SuppressWarnings("serial")
@Entity
@Table(name="user")
public class User extends BaseEntity {
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
public User() {
super();
}
private List<UserAddress> userAddresses;
//配置一对多
//cascade:为级联操作,里面有级联保存,级联删除等,all为所有
//fetch:加载类型,有lazy和eager二种
//这个为manytoone中的对象名
@Cascade({CascadeType.SAVE_UPDATE,CascadeType.DELETE})
@OneToMany(fetch=FetchType.EAGER, mappedBy="user_user")
@BatchSize(size=10)
@OrderBy(clause="id asc")
public List<UserAddress> getUserAddresses() {
return userAddresses;
}
public void setUserAddresses(List<UserAddress> userAddresses) {
this.userAddresses = userAddresses;
}
/**
* 简单admin对象
* @param username 账号
* @param password 密码
* @param isAccountEnabled 是否启用
*/
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
@Column(updatable = true, nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(nullable = false)
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password
+ ", userAddresses=" + userAddresses + "]";
}
}
上面是我的实体类, @Cascade({CascadeType.SAVE_UPDATE,CascadeType.DELETE})这句写了并没有起作用,删除的时候还是提示有外键不能删除。这个是怎么回事
你要明白 hibernate 级联的意思,级联在我们表之间有外键关联的时候可以通过对象映射 以java 对象的形式展现给我们,
比如一对多,多对多,等都可以用对象来表示出来。但是为了维护表中之间关系的稳定,级联只用于查,改,增,但是不用于 删除。
因为删除会破坏表之间的关系。个人觉得级联用于查询的时候就比较方便,其他操作小心点,你会被坑的,(如果真的需要,请删除外键关联再操作)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (hibernatetest
.useraddress
, CONSTRAINT FK_lm3lm212adwiaxok0htlu6wdd
FOREIGN KEY (user_id
) REFERENCES user
(id
))
这个是我执行删除的时候报的错
你这个是主外键约束的问题吧?是先删除有user_id字段的表信息,再删有id字段的表信息