我有一个OneTo多项关系,我可以插入记录,但不能删除它们,当我试图删除它时,它会遇到“外键约束失败”错误。我使用级联删除孤儿如下,但不工作还。
父类的成员具有以下getter
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;
}
成员类的父类具有以下getter
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
......
@ManyToOne
public User getReciever() {
return reciever;
}
我也使用了下面的注释,但不起作用
@Cascade(org.hibernate.annotations.CascadeType.DELETE)
我的冬眠依赖如下
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.1.Final</version>
<type>jar</type>
</dependency>
我删除信息的代码
Message message = (Message) session.get(Message.class, id);
session.delete(message);
tx.commit();
尝试添加以下注释。它对我有用。
@OneToMany(mappedBy="receiver", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public Set<Message> getMessagelist() {
return messagelist;
}
我正在使用实体管理器删除方法,它对我很有效。我用集合代替列表,在我看来这是一种有效的方法。
删除孤儿注释只是为了告诉Hibernate,如果"我从MessageList中删除实体并尝试合并用户,那么你可以安全地删除消息"
@Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
有几种方法可以处理一对一的关系。最常见的方法之一是:
@OneToMany(mappedBy="receiver", CascadeType.REMOVE)
public List<Message> getMessagelist() {
return messagelist;
}
....
@ManyToOne
public User getReciever() {
return reciever;
}
注意fetch=FetchType。LAZY是默认值,您实际上不需要指定它。
此外,可能需要重新创建表,因为已经创建了db约束。不要100%信任hbm2ddl。自动=在这种情况下更新。我建议删除相关表(Message、Reciver和Receiver_Message或Message_Receiver)。接下来,可以使用hbm2ddl。自动=更新。
我希望有帮助。
干杯
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
我目前在数据库中的一对一/多对一映射时遇到问题。我希望我的图书表具有与“出版商”、“流派”、“评级”和“状态”表的@ManyToOne映射。 这是我的Book实体类的外观: 例如,我的Publisher实体类(类型、评级和状态类完全相同): 唯一的区别是类型、评级和状态的书籍字段,f. e: 这就是我的堆栈跟踪的样子: 更新的堆栈跟踪:
我的实体: 这就是我的问题,实际上很少有。 问题1: 我删除了一个Cat对象,设置了cascade类型。所有在Cat中拥有的列表中,因此当我删除Cat对象时,UC中带有Cat的所有记录都将被删除,但我得到“已删除的对象将通过级联重新保存”,这是因为我在UC中与用户有另一个关系,用户将UC存储在列表中。当我从UC中删除Cat对象和记录时,我不想删除用户对象,因此在UC中的@ManyToOne上设置c
我使用的是spring boot starter数据jpa 1.5.1。内部使用hibernate core 5.0.11的版本。最终的 我的实体看起来像这样: 区域 节日的 行动 我试图理解以下观点: > 我的映射是准确的,还是应该使用多重映射来处理这种关系,因为一个区域可以有多个节日,每个节日可以有多个动作 背景:如果我将fetch类型从LAZY改为eanger,就会出现以下错误。希望能够理解
我试着在这里找到类似的问题,我在这里找到了这个,但它没有太大的帮助。 这正是我的问题所在。问题是@ondelete迫使我建立双向关系,对吗?如果可能的话,我想保持单向性。 L.E:我修改了我的处理程序方法,看起来像这样
在使用Hibernate删除与子实体具有关系的JPA实体时,我遇到了一个问题,但是在使用EclipseLink而不是Hibernate作为JPA提供程序时,相同的代码可以正常工作。父实体上的批注是 当使用Hibernate时,它尝试将子实体上的join列设置为null,但由于该列不允许null而失败。使用EclipseLink时,它首先删除子实体,然后删除父实体,这是所需的行为。 我的问题是: 为
问题内容: 我要删除具有多对多关系的一个站点上的表中的一行。我还想删除该关系另一侧的所有相关行。 例如,假设我有以下表格,并且想从中删除一行。我也想从中删除所有相关的行,当然,也删除其中不再需要的任何行。 我知道如何在查询中连接以上表格。但是我看不到如何删除整个关系中的数据。 注意:关系的两端都实现级联删除。因此,例如,从中删除行将删除中的任何相关行。但是显然,这不会传播到表中。 问题答案: 我认