删除实体时,在休眠时从连接表中删除项目

时间:2011-08-11 08:37:05

标签: hibernate annotations many-to-many jointable

我有2个关于@ManyToMany关系的课程

第一堂课:剪辑 第二课:地点

主要思想是剪辑可以在多个位置使用

这是剪辑类。

@Entity
@Table(name = "CLIP")
public class Clip {

    private Long id;
    private List<Location> locations;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @ManyToMany( )
           @JoinTable(name="CLIP_LOCATION",joinColumns=@JoinColumn(name="CLIP_ID",nullable=false),inverseJoinColumns=@JoinColumn(name="LOCATION_ID",nullable=false) )
    @ForeignKey(name="FK_CLIP_LOCATION",inverseName="FK_LOCATION_CLIP")
    public List<Location> getLocations() {
        return locations;
    }
    public void setLocations(List<Location> locations) {
        this.locations = locations;
}
}

这是位置类

@Entity
@Table(name = "LOCATION")
public class Location {
}

这不是双向关系

我的问题: 当我从用户界面中删除位置时,我希望自动删除连接表中的相关行

我能这样做吗?

我应该使用什么注释?

请注意,Location类和Clip类也用于其他关系

由于 Maayan 我使用了错误的关系吗?

1 个答案:

答案 0 :(得分:1)

这是不可能的。在删除位置之前,您必须从位置列表中删除该位置。由于您的关联是单向的,因此您必须执行查询以查找该位置上的所有可用剪辑,并从每个剪辑中删除该位置。

另一种选择是执行本机SQL查询以从连接表中删除行,但请记住,会话中加载的实体不会知道更改。