JPA 存储库 - 一对多 - 删除一个问题 child

JPA Repository - one to many - issue with removing one child

我父子之间是一对多的关系。我正在使用 JPA 存储库。 如果我删除一个 ID 为 54 的儿子,然后再次获取所有儿子:

sonRepository.delete(id);   
List<Son> sons = sonRepository.findAll();

我收到这个错误:

javax.persistence.EntityNotFoundException: Unable to find com.myapp.domain.Son with id 54

我的实体:

@Entity
@Table(name = "T_FATHER")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class FAther implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToMany(mappedBy = "father", fetch = FetchType.EAGER)
    @JsonIgnore
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    private Set<Son> sons = new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Set<Son> getSons() {
        return sons;
    }

    public void setSons(Set<Son> sons) {
        this.sons = sons;
    }
}


@Entity
@Table(name = "T_SON")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Son implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    private Father father;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Father getFather() {
        return father;
    }

    public void setFather(Father father) {
        this.father = father;
    }
}

这个错误似乎只有当儿子已经在数据库中或通过 sql 插入到数据库中(而不是应用程序)时才会发生。如果儿子是通过应用程序添加的:

sonRepository.save(son);

我没有任何问题。如果我重新启动服务器,问题会再次发生。如果addSon和deleteSon不是在同一个session(同一个服务器实例)中完成,就会出现这个问题。

我不明白我做错了什么。如果有人可以帮助我...

谢谢。

这对我来说似乎是缓存机制中的一个错误。我会向 Spring 报告。作为解决方法,OP 确认删除 @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE).