Java 无法在hibernate中删除OneToMany关系的实例
我有一个OneToMany关系,我可以插入记录,但不能删除它们,当我尝试删除它时,会遇到“外键约束失败”错误。我使用了如下级联删除孤儿,但还不起作用 父类的成员具有以下getterJava 无法在hibernate中删除OneToMany关系的实例,java,hibernate,hibernate-onetomany,Java,Hibernate,Hibernate Onetomany,我有一个OneToMany关系,我可以插入记录,但不能删除它们,当我尝试删除它时,会遇到“外键约束失败”错误。我使用了如下级联删除孤儿,但还不起作用 父类的成员具有以下getter import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.OneToMany; @Entity @Dynami
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
@Entity
@DynamicUpdate
public class User extends Employee{
private string userli;
privae List<Message> messagelist();
.....
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
public List<Message> getMessagelist() {
return messagelist;
}
我也使用了下面的注释,但不起作用
@Cascade(org.hibernate.annotations.CascadeType.DELETE)
我的hibernate依赖项如下
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.1.Final</version>
<type>jar</type>
</dependency>
尝试更改cascade=cascadeType.ALL
检查
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
公共列表getMessagelist(){
返回消息列表;
这可能有效,但不确定
处理一对一关系有几种方法。最常见的方法之一是:
@OneToMany(mappedBy="receiver", CascadeType.REMOVE)
public List<Message> getMessagelist() {
return messagelist;
}
....
@ManyToOne
public User getReciever() {
return reciever;
}
@OneToMany(mappedBy=“receiver”,CascadeType.REMOVE)
公共列表getMessagelist(){
返回消息列表;
}
....
@许多酮
公共用户getReceiver(){
回传接收器;
}
请注意,fetch=FetchType.LAZY是默认值,您实际上不需要指定它
此外,由于db约束已经创建,您可能需要重新创建表。在这种情况下,不要100%信任hbm2ddl.auto=update。我建议删除相关表(Message、Reciver和Receiver\u Message或Message\u Receiver)。接下来,您可以使用hbm2ddl.auto=update
我希望有帮助
干杯尝试添加以下注释。这对我很有效
@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Set<Message> getMessagelist() {
return messagelist;
}
使用您的代码后,它不会引发异常,但仍然无法删除记录。它是否从Receiver\u Message或Message\u Receiver表中删除?
Try to change the cascade = cascadeType.ALL
and check
@OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
public List<Message> getMessagelist() {
return messagelist;
It might work but not sure
@OneToMany(mappedBy="receiver", CascadeType.REMOVE)
public List<Message> getMessagelist() {
return messagelist;
}
....
@ManyToOne
public User getReciever() {
return reciever;
}
@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Set<Message> getMessagelist() {
return messagelist;
}
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)