java - 多对多关系正在更新域表
问题描述
所以我有一个这样映射的多对多关系:
@ManyToMany(cascade = CascadeType.MERGE)
@JoinTable( name = "post_category",
joinColumns = @JoinColumn(name = "post_id"),
inverseJoinColumns = @JoinColumn(name = "category_id")
)
private List<CategoryEntity> post_categories;
进而:
@ManyToMany(mappedBy = "post_categories")
private List<PostEntity> posts;
问题是:我的帖子有类别,这些类别位于静态表中,我不想更改。我只想更改关系表。当我第一次保存帖子时它可以工作,但是当我尝试更新帖子时,它会修补应该是静态的表: 更新方法:
public Post att(Post model, Integer id) throws ResponseStatusException {
Optional<PostEntity> optionalEntity = repo.findById(id);
if(!optionalEntity.isPresent()) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Post not found");
}
PostEntity entity = optionalEntity.get();
entity.setPost_categories(((model.getPost_categories() != null) ? CategoryMapper.marshall(model.getPost_categories()) : entity.getPost_categories()));
entity.setPost_author((model.getPost_author() != null) ? model.getPost_author() : entity.getPost_author());
entity.setTitle((model.getTitle() != null) ? model.getTitle() : entity.getTitle());
return PostMapper.unmarshall(repo.save(entity));
}
关系好吗?我究竟做错了什么??
项目的github链接在这里,https://github.com/moreiravictor/EspatodeAPI/tree/master/src/main/java/br/com/espatodea/espatodeAPI
解决方案
经过大量搜索后,我发现这是 cascadeType 的问题。因此,为了解决这个问题,您只需更改为 REFRESH:
@ManyToMany(cascade = CascadeType.REFRESH)
@JoinTable( name = "post_category",
joinColumns = @JoinColumn(name = "post_id"),
inverseJoinColumns = @JoinColumn(name = "category_id")
)
private List<CategoryEntity> post_categories;
REFRESH cascadeType 允许您仅对关系的父亲进行更改。这样孩子(类别)永远不会改变。
推荐阅读
- wordpress - Wordpress 加速 RabbitMQ 队列
- gis - 与使用 PyQGIS 提取的值相比,UI 中的最小最大值不同
- firebase - Advance_pdf_viewer 和 firebase_storage 的颤振依赖问题
- geocoding - 向 Here.com API 结果添加新的兴趣点
- python - 如何从系列中有重复名称的 Pandas DF 创建字典
- performance - 飞镖中的空函数
- bash - 如何扫描条件匹配字符串并在匹配时循环
- javascript - 跨度文本更改后页面变白?
- sql - postgressql/typeorm - 在同一张表上使用过滤器计数并与另一个表连接
- php - 通过 PHP 登录谷歌后如何获取登录电子邮件?