Java 删除hibernate实体而不(尝试)删除关联表(视图)条目

Java 删除hibernate实体而不(尝试)删除关联表(视图)条目,java,hibernate,annotations,many-to-many,Java,Hibernate,Annotations,Many To Many,实体A和B使用链接表AtoB具有多对多关系 如果删除了实体A,则hibernate将删除相关链接。到目前为止还不错 我的问题是,我的链接表是一个隐藏了更复杂关系的视图,并且在这种情况下工作得很好,除非Hibrate试图从视图中删除链接行,导致数据库抱怨 @Entity A... @ManyToMany(fetch = FetchType.LAZY) @JoinTable(name = "AtoB", joinColumns = @JoinColumn(name = "A

实体A和B使用链接表AtoB具有多对多关系

如果删除了实体A,则hibernate将删除相关链接。到目前为止还不错

我的问题是,我的链接表是一个隐藏了更复杂关系的视图,并且在这种情况下工作得很好,除非Hibrate试图从视图中删除链接行,导致数据库抱怨

@Entity A...   

@ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "AtoB", 
    joinColumns = @JoinColumn(name = "A_ID"), 
    inverseJoinColumns = @JoinColumn(name = "B_ID"))
 public Set<A> getASet() {
     return ASet;
 }
@实体A。。。
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“AtoB”,
joinColumns=@JoinColumn(name=“A_ID”),
inverseJoinColumns=@JoinColumn(name=“B_ID”))
公共集getASet(){
返回ASet;
}

有没有办法让hibernate不删除链接行?我没有发现任何级联选项,也没有在关联上使用
updateable=false
等功能。

如果要将其建模为多个关系,听起来您可能使用了错误的“链接表”设计。您可能需要考虑将存储在此表中的额外项拆分为单独的表或存储器

如果您想将“链接表”设计建模为多个关系,听起来您可能使用了错误的设计。您可能需要考虑将存储在此表中的额外项拆分为单独的表或存储器

试试这个:

@ManyToMany(
    fetch = FetchType.LAZY,
    cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
...
有关级联类型,请参阅。

尝试以下操作:

@ManyToMany(
    fetch = FetchType.LAZY,
    cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
...

有关级联类型,请参阅。

我遇到了此问题,以下问题对我有效:

@ManyToMany
@JoinTable(name = "V_LoanSecuredUser",
            joinColumns = @JoinColumn(name = "loanAdditionalInfo_id", updatable = false),
            inverseJoinColumns = @JoinColumn(name = "userAuthentication_Id", updatable = false))
@Persister(impl = ReadOnlyCollectionPersister.class)
@Immutable
public class ReadOnlyCollectionPersister extends BasicCollectionPersister {
    public ReadOnlyCollectionPersister(Collection collection,
            CacheConcurrencyStrategy cache, Configuration cfg,
            SessionFactoryImplementor factory) throws MappingException,
            CacheException {
        super(collection, cache, cfg, factory);
    }

    @Override
    protected boolean isRowDeleteEnabled() {
        return false;
    }

    @Override
    protected boolean isRowInsertEnabled() {
        return false;
    }
}

我遇到了这个问题,以下几点对我起了作用:

@ManyToMany
@JoinTable(name = "V_LoanSecuredUser",
            joinColumns = @JoinColumn(name = "loanAdditionalInfo_id", updatable = false),
            inverseJoinColumns = @JoinColumn(name = "userAuthentication_Id", updatable = false))
@Persister(impl = ReadOnlyCollectionPersister.class)
@Immutable
public class ReadOnlyCollectionPersister extends BasicCollectionPersister {
    public ReadOnlyCollectionPersister(Collection collection,
            CacheConcurrencyStrategy cache, Configuration cfg,
            SessionFactoryImplementor factory) throws MappingException,
            CacheException {
        super(collection, cache, cfg, factory);
    }

    @Override
    protected boolean isRowDeleteEnabled() {
        return false;
    }

    @Override
    protected boolean isRowInsertEnabled() {
        return false;
    }
}

也为我工作。也谢谢你为我做的一切。ThanksCascade设置会直接影响目标实体的行为,而不是associationTable。级联设置会直接影响目标实体的行为,而不是associationTable。