2014-09-25 3 views
0

У меня есть таблица User по отношению к ManyToMany с Radio, как в таблицах ниже. В этом отношении сохраняется только метод saveUser. Подводя итог, только доминирующая сторона сохраняется в таблице USER и RADIO_USER. Как я упорствую на другой стороне?JPA ManyToMany упорство только одна сторона

стол ПОЛЬЗОВАТЕЛЯ:

+--------------------+--------------+------+-----+-------------------+----------------+ 
| Field    | Type   | Null | Key | Default   | Extra   | 
+--------------------+--------------+------+-----+-------------------+----------------+ 
| user_account_id | bigint(20) | NO | PRI | NULL    | auto_increment | 
| name    | varchar(255) | YES |  | NULL    |    | 
+--------------------+--------------+------+-----+-------------------+----------------+ 

стол РАДИО:

+-----------------------+---------------+------+-----+-------------------+----------------+ 
| Field     | Type   | Null | Key | Default   | Extra   | 
+-----------------------+---------------+------+-----+-------------------+----------------+ 
| radio_id    | bigint(20) | NO | PRI | NULL    | auto_increment | 
| name     | varchar(128) | NO |  | NULL    |    | 
+-----------------------+---------------+------+-----+-------------------+----------------+ 

стол RADIO_USER:

+--------------------+------------+------+-----+-------------------+----------------+ 
| Field    | Type  | Null | Key | Default   | Extra   | 
+--------------------+------------+------+-----+-------------------+----------------+ 
| account_radio_id | bigint(20) | NO | PRI | NULL    | auto_increment | 
| radio    | bigint(20) | YES | MUL | NULL    |    | 
| user_account  | bigint(20) | YES | MUL | NULL    |    | 
+--------------------+------------+------+-----+-------------------+----------------+ 

объекта пользователя:

@ManyToMany 
@JoinTable(name = "RADIO_USER", 
    joinColumns = {@JoinColumn(name = "user_account", referencedColumnName = "user_account_id")}, 
    inverseJoinColumns = {@JoinColumn(name = "radio", referencedColumnName = "radio_id")}) 
List<Radio> radios; 

@Transactional 
public void saveUser(User user) { 
    user.setRadios(radioDao.getAll(Radio.class)); 
    entityManager.persist(user); 
} 

RADIO Entity:

@ManyToMany(mappedBy="radios") 
List<User> users; 

@Transactional 
public void saveRadio(Radio radio) { 
    radio.setUsers(userDao.getAllUsersByRole(User.Role.ROLE_ADMIN)); 
    entityManager.persist(radio) 
} 
+0

Если я изменю доминирующую сторону, это сохраняется. – aneto

ответ

0

Это происходит потому, что отношения является двунаправленным и Hibernate стороны владельца является сторона, которая используется, чтобы знать, что связь существует. Тогда для этого мне нужно использовать этот код:

@Transactional 
public void save(Radio radio) { 
    List<User> users = userDao.getAllUsersByRole(User.Role.ROLE_ADMIN); 

    for (User user : users) { 
     user.getRadios().add(radio); 
    } 

    radio.setUsers(users); 
    entityManager.persist(radio) 
} 

См @ManyToMany(mappedBy = “foo”) для более подробной информации.