我有一個帶有 2 個 JPA 物體的 Spring Boot 專案(使用 JHipster):用戶和電影。
我在它們之間創建了一個單向的多對多關系。用戶是關系的所有者。
我想將電影添加到用戶最喜歡的電影串列中(用戶物體中的屬性“收藏夾”)。
但是,當我嘗試將電影添加到收藏夾串列時,表“user_film_favorite”(兩個物體之間的連接表)中沒有任何內容。
映射似乎沒問題,因為當我在這個連接表中手動輸入資料時,我能夠為用戶檢索電影串列。
我在這里尋找了很多類似的問題,但找不到問題所在。
物體用戶:
@Entity
@Table(name = "jhi_user")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class User extends AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Other properties
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(
name = "user_film_favorite",
joinColumns = { @JoinColumn(name = "user_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "movie_id", referencedColumnName = "id") }
)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BatchSize(size = 20)
private List<Film> favorites = new ArrayList<>();
物體影片:
@Entity
@Table(name = "film")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Film implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@NotNull
@Column(name = "title", nullable = false)
private String title;
@Column(name = "plot")
private String plot;
@Column(name = "rating")
private Float rating;
電影服務:
/**
* Add one film to current user favorites.
*
* @param id the id of the film.
* @return the film saved into user favorites.
*/
@Transactional(readOnly = true)
public Optional<FilmDTO> addToFavorites(Long id) {
log.debug("Request to get Film : {}", id);
Optional<Film> filmOpt = filmRepository.findById(id);
// Get current logged user with his favorites
Optional<User> userOpt = userService.getUserWithFavorites();
if (filmOpt.isPresent() && userOpt.isPresent()) {
User user = userOpt.get();
user.getFavorites().add(filmOpt.get());
userService.save(user);
}
return filmOpt.map(filmMapper::toDto);
}
用戶服務:
/**
* Save a user.
*
* @param user the entity to save.
* @return the persisted entity.
*/
public User save(User user) {
log.debug("Request to save User : {}", user);
return userRepository.save(user);
}
如果有人可以幫助我,那就太酷了!提前致謝 :)
uj5u.com熱心網友回復:
您正在從資料庫中讀取用戶,因此呼叫 save 將呼叫EntityManger.merge. 因此,您還需要添加
CascadeType.MERGE
到ManyToMany映射。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355779.html
