简体   繁体   English

Hibernate在事务提交时删除集合元素

[英]Hibernate deletes collection elements on transaction commit

I can't find out why hibernate tries to delete collection elements after transaction commit. 我不知道为什么冬眠试图在事务提交后删除集合元素。 And I even didn't ask it to do so. 我什至不要求它这样做。

Any ideas? 有任何想法吗?

Technical details are posted below. 技术细节在下面发布。

Hibernate dialect: 休眠方言:

    org.hibernate.dialect.SQLServerDialect

Entity class: 实体类:

    @Entity
    @Table(name = "View_m_activity", schema = "model")
    public class SourceActivity {
        private Set<SourceActivityAttrOut> outputAttributes;

        private Long ID;

        @Id
        public Long getID() {
            return ID;
        }

        public void setID(Long ID) {
            this.ID = ID;
        }

        @ElementCollection(fetch = FetchType.EAGER)
        @CollectionTable(name = "View_m_activity_attr_out", schema = "model", joinColumns = @JoinColumn(name = "activity_id"))
        public Set<SourceActivityAttrOut> getOutputAttributes() {
            return outputAttributes;
        }

        public void setOutputAttributes(Set<SourceActivityAttrOut> outputAttributes) {
            this.outputAttributes = outputAttributes;
        }
    }

Collection element entity class: 集合元素实体类:

    @Embeddable
    public class SourceActivityAttrOut {
        private String code;

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }
    }

Execution code: 执行代码:

    @Transactional
    public void readSource(SourcePool sourcePool) {
        sessionFactory.getCurrentSession().createQuery("from SourceActivity", SourceActivity.class).list();
    }

Log info: 日志信息:

Hibernate: 
    select
        sourceacti0_.ID as ID1_0_ 
    from
        model.View_m_activity sourceacti0_

Hibernate: 
    select
        outputattr0_.activity_id as activity1_1_0_,
        outputattr0_.code as code2_1_0_ 
    from
        model.View_m_activity_attr_out outputattr0_ 
    where
        outputattr0_.activity_id=?

Hibernate: 
    select
        outputattr0_.activity_id as activity1_1_0_,
        outputattr0_.code as code2_1_0_ 
    from
        model.View_m_activity_attr_out outputattr0_ 
    where
        outputattr0_.activity_id=?

Hibernate: 
    select
        outputattr0_.activity_id as activity1_1_0_,
        outputattr0_.code as code2_1_0_ 
    from
        model.View_m_activity_attr_out outputattr0_ 
    where
        outputattr0_.activity_id=?

Hibernate: 
    select
        outputattr0_.activity_id as activity1_1_0_,
        outputattr0_.code as code2_1_0_ 
    from
        model.View_m_activity_attr_out outputattr0_ 
    where
        outputattr0_.activity_id=?

Hibernate: 
    delete 
    from
        model.View_m_activity_attr_out 
    where
        activity_id=?

The cause of problem is described here 问题原因在这里描述

Shortly, to solve the problem I had to override hashcode and equals of SourceActivityAttrOut. 很快,为了解决该问题,我不得不重写哈希码和SourceActivityAttrOut的等价物。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM