我试着在这里找到类似的问题,我在这里找到了这个,但它没有太大的帮助。
这正是我的问题所在。问题是@ondelete迫使我建立双向关系,对吗?如果可能的话,我想保持单向性。
java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`blogapp2`.`post_comments`, CONSTRAINT `FKrvgf8o4dg5kamt01me5gjqodf` FOREIGN KEY (`comments_id`) REFERENCES `comment` (`id`))
@GetMapping("/dashboard/showposts/deletecomment/{id}")
public String deleteComment(@PathVariable("id") Long id) {
commentService.deleteComment(id);
return "redirect:/admin/dashboard/showposts";
}
@OneToMany(cascade = CascadeType.ALL)
private List<Comment> comments = new ArrayList<>();
L.E:我修改了我的处理程序方法,看起来像这样
@GetMapping("/dashboard/showposts/deletecomment/{id}")
public String deleteComment(@PathVariable("id") Long id) {
List<Comment> comments = commentService.findAll();
Comment comment = commentService.findBYId(id);
comments.remove(comment);
return "redirect:/admin/dashboard/showposts";
}
你可以在不创建双向关系的情况下这样做,但在这样做时有一个警告,我稍后会讲到这一点,让我们看看如何在单向关系中做到这一点。
首先,您需要在实体关系上指定orphanremoval=true
@OneToMany(cascade = { CascadeType.ALL }, orphanRemoval = true)
List<Comment> comments = new ArrayList();
// Now I am assuming you have equals and hash code methods are implemented in your comment class,
// So all you need to load the Comment Entity by its id and then have to call
Comment comment = dao.findById(id);
comments.remove(comment);
// This will delete the comment from table and will keep all comments as it is.
// Another way is to iterate the comments list and find matching Comment object (add the method in transaction)
@Service
class PostService {
@Transactional
public Comment deleteComment(Integer commentId) {
Post post = repository.findById(id);
List<Comment> comments = post.getComments();
Comment comment = comments.stream().filter(c -> c.getId().equals(commentId)).findAny()
.orElseThrow(() -> new IllegalArgumentException("Invalid comment id"));
comments.remove(comment);
return comment;
}
}
注意事项:
1. post.getComments() // will load all comments from database
2. comments.remove(comment) // will trigger additional INSERT statements
然后它将从注释表中删除该条目,因此这是使用单向关系必须付出的性能代价。
我在一个实体上有一个简单的单向ManyToOne关系,不幸的是,这个关系是在一个我无法更改的模式中定义的。
我有以下作者类: 我的问题是这个测试用例中的最后一个断言失败了。如果我向作者添加一本书,它就会自动添加到图书存储库中。但是如果我从存储库中移除一本书,我如何从作者那里移除它呢?
我有一个OneTo多项关系,我可以插入记录,但不能删除它们,当我试图删除它时,它会遇到“外键约束失败”错误。我使用级联删除孤儿如下,但不工作还。 父类的成员具有以下getter 成员类的父类具有以下getter 我也使用了下面的注释,但不起作用 我的冬眠依赖如下 我删除信息的代码
EventLicensetype.hbm.xml文件: 下面是EventInfo类。同样,在实际文件中有更多的字段,这只是重要的部分: 下面是EventLicenseType类 为什么它不能直接删除记录?为什么它要更新??我还尝试将代码更改为下面的代码,并得到相同的错误。 谁能帮我解决我缺少的东西,或者给我指明正确的方向?
问题内容: 我使用Gson 库将Java对象转换为Json响应…问题是,在JPA请求之后,由于与其他实体的递归关系,无法转换从DB检索到的对象: 我的源代码: 如您在这里看到的,我做了: 只是通过为coordonneesList中的每个GPS对象设置null来消除递归关系。 您认为这是一个很好的解决方案,或者还有其他更实用的方法吗?谢谢 问题答案: 有一个名为GraphAdapterBuilder
我有一个非常简单的Spring靴测试 我要从父实体中删除子实体。链接使用的是单向,拥有实体是父实体。我试着给1打电话。,但hibernate最终生成了一个update语句,将parent_name设置为null(而不是delete where parent_name=“father”),这违反了子表中的不可为null约束。 然后我试着打电话给2。,这一次它给出了一个异常。 你如何修复上面的,以使儿