Я не обновляю обе стороны отношений JPA, но это работает. ОК? - PullRequest
0 голосов
/ 03 ноября 2011

Это мои сущности

@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) или я действительно делаю это правильно?

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Насколько я понимаю из спецификации JPA, пользователь должен установить правильные отношения в памяти .

Для базы данных достаточно установить сторону владения отношениями (и это то, что вы сделали). Таким образом (из теории) это не должно работать, если вы устанавливаете только несобственную сторону.

0 голосов
/ 03 ноября 2011

Это не «шанс». Вот как ожидается, что JPA будет работать.

...