java - 从另一个实体而不是从数据库中删除实体
问题描述
我有两个实体:玩家和团队:
Player
:
@Data
@Entity
public class Player {
@Column(nullable = false)
private String username;
@OneToOne
@JoinColumn(name = "team")
@JsonIgnore
private Team team;
}
Team
:
@Entity
@Data
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToOne(fetch = FetchType.EAGER)
private User captain;
@OneToMany(fetch = FetchType.EAGER)
private List<User> players;
}
TeamRepository
:
@Repository
public interface TeamRepository extends JpaRepository<Team, Long> {
}
我想使用delete()
JPA 中的方法从数据库中删除整个团队。不幸的是,当我这样做时,所有玩家也会从我的数据库中删除。我只想将他们从团队中分离出来。
添加cascade = CascadeType.ALL/DELETE
和Team
调用delete()
方法会导致User
从数据库中删除实体,这就是我不希望发生的事情。
添加cascade = CascadeType.DETACH
和Team
调用delete()
会引发我
java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`32308008_localdb`.`users`, CONSTRAINT `FKhn2tnbh9fqjqeuv8ehw5ple7a` FOREIGN KEY (`team_id`) REFERENCES `team` (`id`))
例外,我不知道为什么。
如果有人知道如何删除团队实体并将用户从上下文中分离,而不是从数据库中分离,我将非常感谢!
解决方案
推荐阅读
- r - 使用 R,如何使用主成分创建和索引?
- python - 在 Python Pandas 中创建重复的 int 子索引
- javascript - 嵌入 YouTube Cookie 的 JS 拦截和删除
- flutter - 如何随机播放从 firebase 检索到的视频?
- python - pylint 或 flake8 的声明性 Jenkins 管道语法
- ffmpeg - tee muxer 失败并出现错误:输出文件 #0 不包含任何流
- javascript - 为 Nextjs 中的每个身份验证用户创建一个 firestore 文档(仅使用使用 Google 登录)
- javascript - 使用 MediaElementPlayer 在 Safari 上构建播放列表时出错
- python - 制作两列的分布直方图
- java - 如何在springboot服务器中托管角度构建文件?