【发布时间】:2021-11-11 00:30:07
【问题描述】:
我有一个带有 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);
}
如果有人可以帮助我,那就太好了!在此先感谢:)
【问题讨论】:
标签: spring-boot spring-data-jpa many-to-many