【问题标题】:Cannot Delete a row from my table无法从我的表中删除一行
【发布时间】:2013-11-14 07:54:48
【问题描述】:

我正在使用 spring MVC 和休眠框架。我有 2 个表。它们是 Team 和 Releases。它有一个一对多的映射。我可以从 Releases 中删除重新编码,但是当我从 Team 中删除时,它给出以下错误

HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: 
Could not execute JDBC batch update; SQL [delete from Teams where teamID=?]; 
constraint [null]; 
nested exception is org.hibernate.exception.ConstraintViolationException: 
Could not execute JDBC batch update

【问题讨论】:

    标签: java sql spring hibernate model-view-controller


    【解决方案1】:

    首先,您需要从 Releases 中删除所有引用您需要删除的 Team 的记录,然后是 Team。

    或使用

    @OneToMany(orphanRemoval=true)
    

    【讨论】:

    • @RequestMapping(value="/DeleteTeam", method=RequestMethod.POST) public String editDeleteRecodes(@ModelAttribute NewTeams newTeams, BindingResult 结果, @RequestParam String action, Map map){团队团队 = 新团队();团队.setTeamID(newTeams.getTeamID()); teamService.delete(团队);返回“重定向:/”; }
    • @user2991030 什么?在对答案的评论中发布您的代码在您的问题中(未格式化在不可读的块中)。
    • 在 Team 类中添加 @OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true)。
    • 是的,但它仍然给出错误。这是我的代码:@OneToMany(mappedBy = "teams",fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true) Erro is:HTTP Status 500 - 请求处理失败;嵌套异常是 org.springframework.dao.DataIntegrityViolationException:无法执行 JDBC 批量更新; SQL [从 TeamID=? 的团队中删除];约束[空];嵌套异常是 org.hibernate.exception.ConstraintViolationException: 无法执行 JDBC 批量更新
    【解决方案2】:

    由于您的表 Teams 与表 Releases 具有一对一的映射关系,因此异常清楚地表明您违反了完整性约束。您的查询

    delete from teams where id=?
    

    尝试从表Teams 中删除记录,但由于您有到Releases 的映射,您首先需要删除表ReleasesteamID 的引用行,然后从表中删除相应的行Teams 表。

    【讨论】:

    • 啊酷...你的答案很清楚... @Override public void delete(Teams teams) { // TODO 自动生成的方法存根 session.getCurrentSession().delete(teams); } 你能给出一些示例代码吗..
    • 你应该自己试试。尝试谷歌搜索一些解决方案。最好的学习方法是通过实践。 :) ..
    【解决方案3】:

    你用的hibernate方法不对~! 该代码: “hibernate.update(sql);”。

    【讨论】:

    • 我正在使用这个..@Override public void delete(Teams teams) { // TODO 自动生成的方法存根 session.getCurrentSession().delete(teams); }
    • 我正在使用删除方法
    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多