gpt4 book ai didi

java - 删除多对一关系中的单个条目 Hibernate

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:22 25 4
gpt4 key购买 nike

public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long userId;

String name;

@OneToMany(cascade = CascadeType.REMOVE)
List<Player> playerList = new ArrayList<>();
}

public class Player {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
long playerId;

String team;

@ManyToOne
User user;
}

用户可以有多个玩家。
我想删除单个玩家,即从玩家表 [1 个条目]、user_player [1 个条目] 表中引用。

请帮忙,我怎么能不使用 HQL。

User u = new User(); 
u.name = "George";
Player p1 = new Player();
p1.team = "india";
Player p2 = new Player();
p2.team = "us";
session.beginTransaction();
session.save(u);
session.save(p1);
session.save(p2);
session.getTransaction().commit();

现在我想删除 p1,但如果我使用 session.delete,那么 user_player 表中的一个引用将被保留。我不想删除整个用户。感谢回复

最佳答案

如果将级联更改为 cascade-all,这一切都会变得更简单。您有一个聚合对象,您应该只对聚合根执行数据库操作,在您的例子中是 User。因此,您应该在 User 中添加和删除玩家,并只保存它。然后保存将级联到玩家。如果您从用户中删除播放器,然后保存用户,播放器将被 hibernate 为您删除。要实现此功能,您必须在 User 类中使用 addPlayer(Player player) 方法将播放器添加到集合中,并使用 setUser(User user) 您的 Player 类上的方法,该方法从 addPlayer() 中调用。

关于java - 删除多对一关系中的单个条目 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24089075/

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