【问题标题】:@OneToOne with CascadeType.ALL not getting deleted?@OneToOne 与 CascadeType.ALL 没有被删除?
【发布时间】:2023-03-25 13:55:01
【问题描述】:

从数据库中删除父对象时,我想删除所有附加的子对象。但它不起作用:

@Entity
public class ParentEntity {
    @Id
    private Long id;    

    //must remain unidirectional
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
    private MyEntity my;

}

@Entity
public class MyEntity {
    private String text;
}

public interface ParentEntityRepository extends CrudRepository<ParentEntity, Long> {}

当我执行时:

@Autowired
private ParentEntityRepository  dao;

@Transactional
public void removeId(long id) {
      dao.delete(id);
}

结果: MyEntity 行仍然存在于数据库中!为什么?

【问题讨论】:

  • dao.delete(id); 长什么样子?
  • 这是一个春天CrudRepository,在上面添加。
  • 父实体行本身是否已从数据库中删除?
  • 是的,父行已完全删除。
  • 您使用的是 EclipseLink 还是 Hibernate?

标签: java hibernate


【解决方案1】:

你可以试试这个

@OneToOne(cascade = CascadeType.DELETE_ORPHAN)
private MyEntity my;

如果不起作用,您可以试试这个:

Hibernate deleting orphans when updating collection

【讨论】:

  • 如果你看看我的例子,那是我 100% 拥有的,但它不起作用!
  • 我不是在更新一个集合,而是一个@OneToOne 对象引用。请先阅读问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多