代码之家  ›  专栏  ›  技术社区  ›  Paul Adamson

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

  •  0
  • Paul Adamson  · 技术社区  · 16 年前

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

    如果删除了实体A,则hibernate将删除相关链接。到现在为止,一直都还不错。

    @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;
     }
    

    有没有办法让hibernate不删除链接行?我还没有找到任何级联选项或使用 updateable=false 在一个协会上等等。

    3 回复  |  直到 10 年前
        1
  •  3
  •   CSchulz cL83    14 年前

    @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;
        }
    }
    
        2
  •  2
  •   candiru    16 年前

    试试这个:

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

    JPA Annotations 对于级联类型。

        3
  •  0
  •   matt b    16 年前

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