具体的需求是这样的,我想删除公司的员工,但是不想删除和员工关联的历史信息,比如这个员工在公司都干过什么。我的方案是在数据库表设计的时候,可以增加一个删除标识字段,或是设置员工的失效期。在数据的持久化层我采用hibernate来实现,当删除数据的时候,是发update语句,但是hibernate自动生成的update语句一改所有的字段都跟着修改,有点影响效率,请问有什么别的方案,或是优化hibernate查询吗?

解决方案 »

  1.   

    主表的 hbm.xml 配置文件中 inverse 改为 false ,当删除的时候 会自动把从表的主键列改为null
            <set name="answers" inverse="false" >
                <key>
                    <column name="qid" length="50" />
                </key>
                <one-to-many class="com.wq.domain.Answer" />
            </set>
      

  2.   

    将cascade改为save-update就可以了
      

  3.   

        存在外键依赖,改cascade有什么用啊
      

  4.   

    可以把状态单独放到一个状态表中,你用hibernate更新的时候只更新状态表就可以了。
      

  5.   

    将数据库中的外键关联的cascade on delete去掉
      

  6.   


    那每次查询的时候都要进行表接啊,hibernate能不能只改一个字段