[英]JPA ManyToMany persist only one side
我有與多對多關系與無線電的表User,如下表。 在此關系中,只有方法saveUser
保留在關系表中。 總而言之,USER和RADIO_USER表中僅保留了主導方。 我如何堅持另一邊?
表USER:
+--------------------+--------------+------+-----+-------------------+----------------+
| 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);
}
無線電實體:
@ManyToMany(mappedBy="radios")
List<User> users;
@Transactional
public void saveRadio(Radio radio) {
radio.setUsers(userDao.getAllUsersByRole(User.Role.ROLE_ADMIN));
entityManager.persist(radio)
}
看起來像您要層疊。
請參閱: http : //en.wikibooks.org/wiki/Java_Persistence/Relationships#Cascading
這是因為關系是雙向的,對於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”) 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.