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);