当前位置: 首页 > 知识库问答 >
问题:

Spring Data Jpa:@ManyToOne关系中的交替级联类型

萧光华
2023-03-14

有一个实体框:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@ToString
@Table(name="box")
public class Box {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idbox", updatable = false, nullable = false)
    private int idbox;

    @Column(name = "brand")
    private String brand;

    @Column(name = "size")
    private BigDecimal size;

    @OneToMany
    private Set<Content> content;
}

和实体内容:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@ToString
@Table(name="content")
public class Content {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "idcontent", updatable = false, nullable = false)
    private int idcontent;

    @Column(name = "amount")
    private Integer amount;

    @Column(name = "shape")
    private String shape;

    @ManyToOne
    @JoinColumn
    private Box box;
}

如果我把

(级联=级联类型。删除)

在Box的“@ManyToOne”中,我删除了该Box,保留了子实体(使Box内容可用于另一个Box)。

相反,如果我使用

(级联=级联型。全部)

将删除框,包括子实体(删除框及其内容)。

假设在某些情况下,需要删除框及其内容。尽管相反,有时我只需要删除框,但保留其内容。

如何根据以上内容选择所需的级联类型?

共有1个答案

狄天逸
2023-03-14

您不能动态更改级联类型。您需要使用最弱的级联类型,并在应用程序代码中手动级联高于该类型的所有内容,即在这种情况下显式调用子级上的delete。

 类似资料:
  • 我在将带有@ManyToOne关系的实体(雇员)映射到带有@OneToMany关系的实体(社区)时遇到了问题。 当我将一个实体(社区)分配给一个实体(员工),其中社区的值为空时,它工作正常。 问题出现了,如果雇员已经为社区分配了价值。当我更改该值并保存更改时,该员工为社区获得了新的值,并且这个新社区在集合中获得了该员工。唯一的问题是,老社区仍然有这个员工在收集,但它应该被删除。这只有在数据库重新启

  • 环境:Spring 4.0.3,spring-data-jpa 1.2.0,Hibernate 4.2.10,jackson 2.3.3,lombok 1.12.6, 科目实体(已编辑) 用户实体(已编辑) 事务管理器(编辑)

  • 我没有那么多的冬眠。所以,当反转和级联进入画面时,陷入一个点。我知道,inverse告诉hibernate拥有实体,该实体负责更新它们的关系,Cascade会告诉hibernate首先保存实体,然后保存其从属实体。 我只是想知道是否必须在同一个实体中声明级联="all"和反转="true"。我们可以通过其他实体中的反转和级联属性将一个声明为拥有实体吗?请说明这一点? 谢谢。

  • 对于我的任务,我需要使用JPA创建多对多的关系,但是连接表是手动指定的,并带有额外的列。数据结构如下所示: 图书(id、名称、已出版、流派、评级) 作者(身份证、姓名、性别、出生) 图书-作者(id,book-id,author-id) 我创建了这样的实体: 作者: 书: AuthorBook表: 例如,当我删除ID=2的book,它将删除ID=1的author。有没有什么方法可以在不删除已绑定作

  • 这就是我在教师实体中所拥有的: 现在我喜欢使用数据库的功能。重复一遍:数据库的删除级联功能只针对Student_Teacher-table! 问题是: 问题是:这很好,但是要触发删除中的条目,我必须在两边指定。Hibernate不解析,只看到,并将目标实体(和引用的学生)从缓存中删除,但它们仍然在数据库中!!!因此,我不得不在空降后彻底清除Hibernate期,重新阅读教师、傅太太、巴尔先生和学生

  • 我有两门课: 当我用UserRole保存User时,出现了一个奇怪的错误: 如果它创建了userrole_user_role_id,为什么要使用User_Role_ID?我该怎么修好它?