Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 删除OneToMany关系中的实体保留另一方实体(JPA)_Hibernate_Jpa - Fatal编程技术网

Hibernate 删除OneToMany关系中的实体保留另一方实体(JPA)

Hibernate 删除OneToMany关系中的实体保留另一方实体(JPA),hibernate,jpa,Hibernate,Jpa,我知道标题不太清楚,但这是我能想到的最好的标题。让我解释清楚。 我有一个用Java编写的web应用程序,使用Spring作为后端框架,并使用JPA处理MySql数据库。 假设我们有两个实体: @Entity public class Item{ private Long itemId; @OneToMany(mappedBy="item") private List<Purchase> purchases; ... } @Entity public clas

我知道标题不太清楚,但这是我能想到的最好的标题。让我解释清楚。 我有一个用Java编写的web应用程序,使用Spring作为后端框架,并使用JPA处理MySql数据库。 假设我们有两个实体:

@Entity
public class Item{
   private Long itemId;
   @OneToMany(mappedBy="item")
   private List<Purchase> purchases;
   ...
}

@Entity
public class Purchase{
   private Long purchaseId;
   @ManyToOne
   private Item item;
}
与之相关的购买会发生什么情况?
它是否取决于OneToMany注释的级联属性?

是。如果您有级联删除,则将删除购买。如果没有,那么您将有一个异常,因为您的数据库中存在外键约束冲突(它将引用您试图删除的实体)。你为什么不自己试试看呢?是的,关键是我想知道推荐的方法是什么。我的意思是,如果我删除这个项目,我总是会有你们所说的那个例外。我该怎么处理呢?我是否应该每次都尝试捕捉它,或者是否有一种替代方法,以便使用空值而不是item对象?那么,您希望这些购买变成什么?它们要么消失,要么留下,但无法引用不再存在的项目。因此,如果需要后者,请在删除项目之前将purchases项目设置为null。如果该列可为null,则当然可以。只有列具有值时,外键约束才适用。如果它为空则不会。@StefanoSambruna另外,最好检查一下外键,确保它在更新级联时未声明为
,因为这意味着每次删除items表中的“parent”行时,所有的“children”都会被删除采购表中具有特定item_id作为外键的行也将被删除。是。如果您有级联删除,则将删除购买。如果没有,那么您将有一个异常,因为您的数据库中存在外键约束冲突(它将引用您试图删除的实体)。你为什么不自己试试看呢?是的,关键是我想知道推荐的方法是什么。我的意思是,如果我删除这个项目,我总是会有你们所说的那个例外。我该怎么处理呢?我是否应该每次都尝试捕捉它,或者是否有一种替代方法,以便使用空值而不是item对象?那么,您希望这些购买变成什么?它们要么消失,要么留下,但无法引用不再存在的项目。因此,如果需要后者,请在删除项目之前将purchases项目设置为null。如果该列可为null,则当然可以。只有列具有值时,外键约束才适用。如果它为空则不会。@StefanoSambruna另外,最好检查一下外键,确保它在更新级联时未声明为
,因为这意味着每次删除items表中的“parent”行时,所有的“children”都会被删除purchase表中具有特定item_id作为外键的行也将被删除。
itemRepository.delete(item);