gpt4 book ai didi

java - JPA 存储库 - 一对多 - 删除一个子项时出现问题

转载 作者:行者123 更新时间:2023-12-01 11:57:45 25 4
gpt4 key购买 nike

我的父亲和儿子之间有一对多的关系。我正在使用 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)

关于java - JPA 存储库 - 一对多 - 删除一个子项时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com