首页 > 解决方案 > 从另一个实体而不是从数据库中删除实体

问题描述

我有两个实体:玩家和团队:

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/DELETETeam调用delete()方法会导致User从数据库中删除实体,这就是我不希望发生的事情。

添加cascade = CascadeType.DETACHTeam调用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`))

例外,我不知道为什么。

如果有人知道如何删除团队实体并将用户从上下文中分离,而不是从数据库中分离,我将非常感谢!

标签: javaspring-bootjpa

解决方案


推荐阅读