@ManyToMany,使用视图

时间:2019-01-04 13:42:06

标签: hibernate jpa-2.0

我在实体“位置”上的@ManyToMany属性遇到麻烦。 该位置包含与其他位置的父/子关系,因此它基本上表示位置树。 (位置A包含子A1,A2,位置A2包含另一个位置B,依此类推。)

没有火箭科学。

由于这是众所周知的“树”,并且Hibernate / JPA不支持分层查询,因此我添加了一个只读的ManyToMany关系“ allParents”。就像已经说过的名字一样,该集合包含所有在树上向上移动的父母。 为此,我创建了一个视图,该视图在映射中用作可联合对象。

这里也没有火箭科学。一切正常。

请注意,我从不使用级联操作。

当我要删除位置时出现问题。 此删除尝试也删除该可连接项中的记录(实际上通常是这种情况),但这显然不适用于视图。 (至少不是我的观点)。

因此,我正在寻找一种方法来将该关联标记为只读。 @Immutable似乎不起作用。

(总是得到异常:org.postgresql.util.PSQLException:错误:无法从视图“ allnamedparents”中删除)

有人能指出我正确的方向吗?

谢谢!

@Entity
@Table(name = "location")
public class Location extends AbstractAuditingEntity implements {


    @OneToMany()
    @JoinColumn(name = "parent_id", foreignKey = @ForeignKey(name = "FK_location_parent"))
    private Set<AbstractLocation> childLocations = new LinkedHashSet<>();


    @Column(name="parent_id", updatable = false,insertable = false)
    private Long parentId;

    @Immutable()
    @ManyToMany()
    @JoinTable(
            name = "allnamedparents",
            joinColumns = {@JoinColumn(name = "locationid", referencedColumnName = "id")},
            inverseJoinColumns = {@JoinColumn(name = "parentid", referencedColumnName = "id")}
            )
    private List<AbstractLocation> allParents = new ArrayList<>();



}

0 个答案:

没有答案