当前位置: 首页 > 面试题库 >

如何级联删除属于jpa实体的集合?

太叔岳
2023-03-14
问题内容
@Entity
public class Report extends Model {

    public Date date;
    public double availability;

    @ElementCollection
    @Cascade(value={CascadeType.ALL})
    public Map<FaultCategory, Integer> categories;      
}

在我的一项工作中,我有以下代码:

int n = MonthlyReport.delete("date = ?", date);

这始终无法删除具有以下错误的实体:

DELETE语句与REFERENCE约束“ FK966F0D9A66DB1E54”冲突。数据库“ TFADB”的表“
dbo.MonthlyReport_categories”的列“ MonthlyReport_id”中发生了冲突。

我如何指定映射,以便在删除报告时删除category集合中的元素?


问题答案:

级联删除(通常是级联操作)仅在通过操作完成时有效EntityManager。当通过JP QL /
HQL查询作为批量删除完成删除时不可以。您无法指定在ElementCollection通过查询完成删除时将删除链接到元素的映射。

ElementCollection注释没有层叠属性,因为操作始终是层叠的。通过删除实体时EntityManager.remove(),操作会级联到ElementCollection

您必须获取MonthlyReport要删除的所有实体,并EntityManager.remove为每个实体调用。看起来,在Play框架中,您也可以在实体中调用delete-
method来代替它。



 类似资料:
  • 我有两个具有一对一关系的实体,A和B。B实体是可选的,可以自行更新和删除,但必须始终链接到A的实例。 所以我有两个JPA实体,A和B具有双向关系。这是从A到B的那个。 我可以创建a和B,删除a,然后两者都被删除。好的 但由于从A到B的级联,如果i<code>em。remove(b)删除不会持久化。即使我做了。 在保留级联的同时删除可选实体的唯一方法似乎是使用新的JPA2特性orphanRemova

  • 主要内容:JPA级联删除示例,输出结果级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除。 以下语法用于执行级联删除操作 - JPA级联删除示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步: 在包下创建

  • 代码: 三个问题: > 我必须放置<code>CascadeType吗。在两个实体中删除?我希望它能正常工作,这样如果我删除了老师,课程就会自动删除。 在我的数据库中,我的id无法正常工作。我希望它使id每次增加一个,但它目前增加了一些随机数。为什么呢? 我还有两个类,但有关系。当我想在数据库中持久化一个新对象时,我必须做什么?

  • 编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下:

  • 我有一些关于“级联”的问题,在我的项目中,我有类别类,每个类可以是父类或子类。但我在同一个类中定义了哪一个是父母还是孩子。父母和孩子之间存在一对多的关系。这是我的实体类 我的问题是;当我删除子类别时,它的成功并没有问题。如果父类别有子类别,则无法删除父类别。 错误消息; Servlet.service()的servlet[调度Servlet]在上下文中与路径[]抛出异常[请求处理失败;嵌套异常or

  • 主要内容:JPA实体删除示例要从数据库中删除记录,可以使用接口提供方法。方法使用主键来删除特定的记录。 JPA实体删除示例 在这里,我们将演示如何根据主键删除指定学生的信息。 完整的项目代码如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,它包含属性:,和。 文件:StudentEntity.java 的代码如下 - 第2步: 将实体类和其他数据库配置映射到文件中。 文件:persistence.