Java 我不知道';不要更新JPA关系的双方,但它是有效的。好啊

Java 我不知道';不要更新JPA关系的双方,但它是有效的。好啊,java,hibernate,jpa,entity-relationship,Java,Hibernate,Jpa,Entity Relationship,这些是我的实体 @Entity public class User { @ManyToMany(mappedBy="admins") private Set<Game> adminForGames = new HashSet<Game>(); @Entity public class Game { @ManyToMany @JoinTable( name="Game_adminUsers",

这些是我的实体

@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>();
正如您所见,我不会更新
someUser
以将新游戏添加到他的
adminForGames
,尽管根据JPA规范,这是我的责任

尽管如此,它仍然可以正常工作,这是合乎逻辑的,因为
用户
记录实际上不需要写入(因为关系使用联接表)


它是“偶然”工作的(我的实现是Hibernate)还是我实际上做得正确?

这不是“偶然”。这是JPA应该如何工作的。

我从JPA规范中了解到,在内存中设置正确的关系是用户的责任


对于数据库,设置关系的拥有方就足够了(这就是您所做的)。因此(从理论上讲)如果只设置非拥有方,它应该不起作用。

好的,所以我不能期望在交易后从同一
用户
实例的
adminForGames
字段获得正确的信息?反正我也不需要这么做,没错。或者,您可以从数据库中刷新用户以获得正确的adminForGames信息。
Game game = new Game(index, name);
game.getAdminUsers().add(someUser);
em.persist(game);