【问题标题】:Force Hibernate to delete joining table rows强制休眠删除连接表行
【发布时间】:2012-12-21 23:56:39
【问题描述】:

我有点困惑,因为我无法强制 Hibernate 删除连接表中的行。可能我需要配置一些不同的东西。

我有一个表 Component 和 Task 以及一个连接它们 Component_Tasks 的表。在我的班级组件中,我有:

@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Component_Tasks",
           joinColumns = @JoinColumn(name = "ComponentID"), inverseJoinColumns = @JoinColumn(name = "TaskID"))
public List<Task> getTasks() {
    return tasks;
}

在我的课堂任务中我有

@ManyToOne
@JoinColumn(name = "ComponentID")
public Component getComponent() {
    return component;
}

我想要的是,当我删除任务时,我默认删除 Component_Tasks 表中的下划线行。基本上我的删除失败是因为外键关系

ALTER TABLE Component_Tasks ADD FOREIGN KEY (TASKID)  REFERENCES Tasks (ID); 

我相信如果我将任务中的组件设置为 null 然后我保存对象然后尝试删除它,我可以实现相同的行为。但我希望 Hibernate 默认执行此操作。

有什么建议吗?

【问题讨论】:

    标签: hibernate one-to-many many-to-one cascading-deletes


    【解决方案1】:

    您的映射错误。在 Component 中,您是说 Component 和 Task 之间的关联是通过连接表映射的。

    在 Task 中,您是说相同的关联由 Task 表中的连接列映射。

    下定决心。如果关联是OneToMany双向关联,通常不需要连接表,只需要

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "component")
    public List<Task> getTasks() {
        return tasks;
    }
    

    @ManyToOne
    @JoinColumn(name = "ComponentID")
    public Component getComponent() {
        return component;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多