这些是我的实体
@Entity
public class User {
@ManyToMany(mappedBy="admins")
private Set<Game> adminForGames = new HashSet<Game>();
@Entity
public class Game {
@ManyToMany
@JoinTable(
name="Game_adminUsers",
joinColumns=@JoinColumn(name="Game_id"),
inverseJoinColumns=@JoinColumn(name="User_id")
)
private Set<User> adminUsers = new HashSet<User>();
这就是我创建新Game
:
Game game = new Game(index, name);
game.getAdminUsers().add(someUser);
em.persist(game);
正如您所看到的,我没有更新someUser
以将新游戏添加到他的adminForGames
,尽管根据JPA规范这是我的责任。
但是,它工作正常,这是合乎逻辑的,因为User
记录实际上不需要写入(因为关系使用连接表)。
它是“偶然”工作(我的实现是Hibernate)还是我实际上正确地做了这个?
答案 0 :(得分:1)
我对JPA规范的理解是,用户有责任在内存中设置正确的关系 。
对于数据库,设置关系的拥有方就足够了(这就是你所做的)。所以(从理论上说)如果你只设置非拥有方那就不行。
答案 1 :(得分:0)
这不是“机会”。这就是JPA的工作方式。