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

正在删除OneToMany双向关系的记录?

龙兴学
2023-03-14

我正在寻找如何删除关系的寄存器一对多/多对一。问题是当我执行EntityManager.remove()时,所有记录都被删除,我希望删除唯一的孩子(DiasTurma)而不是您的父级(Turma)。

我是这样尝试的

// parent
@Entity
public class Turma implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Integer id;

    @NotNull @Column(unique = true)
    private String turmaNome;    

    @OneToMany(mappedBy = "turma", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    private List<DiasTurma> diasTurma = new ArrayList<DiasTurma>();
    //gets/sets


//child
@Entity
public class DiasTurma implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue
    private Integer id;

    private String horaInicio;
    private String horaFim;
    private String diaSemana;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinColumn(name = "id_turma")
    private Turma turma;
    //gets/sets


// DAO
/** remove DiasTurma of Turma */
public void removeDiasTurma(){
        DiasTurma dias = (DiasTurma)em.find(DiasTurma.class, 3);
        em.getTransaction().begin();
        em.remove(dias);
        em.getTransaction().commit();
        em.close();
    }

方法

例如,如何仅删除记录3?


共有1个答案

宰父嘉胜
2023-03-14

问题是我做EntityManager时。remove(),所有记录都被删除,我希望唯一的孩子(DiasTurma)被删除,而不是你的父母(Turma)

发生这种情况是因为您明确要求级联删除:

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 

由于您指定了烹调=ALL,因此在DiasTurma上完成的每个操作,包括的删除(),都会级联到其父Turma。

 类似资料:
  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系

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

  • 问题内容: 我使用Gson 库将Java对象转换为Json响应…问题是,在JPA请求之后,由于与其他实体的递归关系,无法转换从DB检索到的对象: 我的源代码: 如您在这里看到的,我做了: 只是通过为coordonneesList中的每个GPS对象设置null来消除递归关系。 您认为这是一个很好的解决方案,或者还有其他更实用的方法吗?谢谢 问题答案: 有一个名为GraphAdapterBuilder

  • 我试图在用户和地址之间建立双向关系, 用户1-------->*地址 但是 地址1-------->1个用户 我在上网时得到了这些信息 > 对于一对一双向关系,拥有方对应于包含对应外键的方 双向关系的反向侧必须通过使用OneToOne、 OneToMany或ManyToMany批注的mappedBy元素来引用其 所属侧。mappedBy元素指定作为 关系所有者的实体中的属性或字段。 但如果我按照情

  • OneTomany:Trplist:TargetEntity:TravelRoutePoints MappedBy:route Cascade:[“Persist”,“Remove”]JoinColumn:Name:id引用的ColumnName:tr_id

  • 在我的Spring/MySql系统中,我有一些Jpa实体,它们通过父关系上的joinTable在OneToMany关系中连接。在这种情况下,一个帖子有很多评论。 如果我尝试删除Post实体,问题是生成的SQL试图删除仍在连接表中的注释,从而触发外键冲突。 什么是正确的方法: 删除连接表项 删除连接表左侧父关系实体 删除连接表右侧子关系实体 要记住的一些事情: 还有其他实体通过oneTo多项关系拥有