【问题标题】:JPA / Hibernate cascade deleting while removing in ManyToOne relation在 ManyToOne 关系中删除时 JPA / Hibernate 级联删除
【发布时间】:2014-02-22 18:49:18
【问题描述】:

我在使用@ManyToOne 进行级联删除时遇到了很大的问题。我有两个类:用户(从“一”端)和地址(从“多”端),我的问题是:

-当删除与用户关联的地址实体时(用户当然有许多关联的地址),不仅从数据库中删除了一条地址记录,而且他的所有者=用户。更重要的是 - 与该用户关联的所有地址也被删除:(

-所以,这不是我所期望的,谁能告诉我,我做错了什么?

用户类

public class User implements Serializable{

    @Column(name="id")
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

private Set<Adress> adresses;   

     @OneToMany(mappedBy = "user", cascade=CascadeType.ALL)
     public Set<Adress> getAdresses() {
         return adresses;
     }
     ...
}

单元类

@Entity
@Table(name="unit")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="unit_type", discriminatorType = DiscriminatorType.STRING)
public class Unit implements Serializable {

    private Integer id;

    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

}

地址类

@DiscriminatorValue("adr")
public class Adress extends Unit implements Serializable {

     private User user;

     @ManyToOne 
     @JoinColumn(name="adress_id")
     public User getUser(){
         return user;
     }
     ...

}

AdressDaoImpl 类的一部分:

    public void delete(Adress adress) {
        Adress mergedWithContextAdress = entityManager.merge(adress);
        entityManager.remove(mergedWithContextAdress);
        logger.info("Adress removed.");
    }

AdressDaoTest 类的部分:

    Adress adress = adressDao.findById(1);
    adressDao.delete(adress);

【问题讨论】:

  • 你能显示你正在删除的代码吗?
  • 你有没有 XML 映射文件,还是只使用注解?
  • 我没有 XML,只使用了注解。
  • 这段代码看起来不错,所以问题一定出在您没有显示的部分代码上。您是否在同一事务中执行其他操作?您的实体中有@Id 字段吗?如果你这样做,请给他们看。
  • 好吧,我之前做了一些简化。如您所见,Address 继承自 Unit 及其 Id 字段。

标签: java spring hibernate jpa


【解决方案1】:

尝试这样做

  Adress adress = adressDao.findById(1);
  adress.setUser(null);   //Set null reference before remove
  adressDao.delete(adress);

只是一个评论,应该是地址而不是地址 XD。

【讨论】:

  • 它仍在删除关联的用户以及其余地址(与用户关联):(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2020-06-25
  • 2016-05-03
  • 1970-01-01
  • 2022-10-07
相关资源
最近更新 更多