You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot(JHipster) JPA单向ManyToMany关联数据未写入关联表问题

故障排查及修复方案

1. 核心问题:只读事务禁止数据修改

你在FilmService的addToFavorites方法上标注了@Transactional(readOnly = true),该配置会声明当前事务为只读模式,Spring会禁止所有数据写入操作,自然无法向关联表插入数据,这是问题的直接诱因。

修复方式:修改事务注解为可写模式:

// 移除readOnly = true属性
@Transactional
public Optional<FilmDTO> addToFavorites(Long id) {
    // 原有业务逻辑保持不变
}

2. 关联级联配置补充

你当前User实体的多对多关联仅配置了CascadeType.PERSIST,该规则仅在首次保存新的User实体时同步关联的Film数据。当你修改已存在的用户的收藏列表时,底层调用的是merge操作,需要补充MERGE级联才能同步更新关联表数据:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@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<>();

3. 可选校验:确认UserService.save的事务配置

如果UserService的save方法没有配置@Transactional注解,建议补充该配置,避免父方法事务失效时无法持久化修改:

@Transactional
public User save(User user) {
    log.debug("Request to save User : {}", user);
    return userRepository.save(user);
}

完成以上修改后,再执行添加收藏操作即可正常生成关联表数据。

内容的提问来源于stack exchange,提问作者lysenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:24:08