关闭

给hibernate的Set增加死条件筛选

标签: Hibernatebhmset数据库配置
617人阅读 评论(0) 收藏 举报
分类:

参照Hibernate官方文档:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/collections.html


之前用Hibernate写的系统,其中有一个大家都在公用的附件表Appendix。A模块需要的附件存在这里,B模块需要的附件也存在这里,除了存A或B或C或D...模块的ID以外,还存一个table_name字段,用来区分是A、B、C、D中的哪一个。比如id=5, table_name='B',那么就代表id为5的B模块中的附件。

作为Hibernate的Newbie,只知道用一列映射,于是当初就是这么写的:

        <set name="appendixs">
            <key>
                <column name="id"/>
            </key>
            <one-to-many class="beans.Appendix"/>
        </set>

然后再在程序里用java手动去过滤它们……= =

但是后来发现保存的时候斯巴达。保存的时候会把其他连带的也覆盖掉了。比如id为5的B的附件全删除了,我就b.setAppendixs(null); 这一写不要紧,id为5的A、C、D中的附件也全都消失了……最要命的是这项目已经在客户那边上线了,还要做大手术是风险很高的……Leader告诉我慢慢改,改了出了问题再说(囧。

我实在是不甘心,觉得应该有其他的更优雅的解决方案的才对……查来查去,在Hibernate文档里终于找到了这货,where...

        <set name="appendixs" where="table_name='B'">
            <key>
                <column name="id"/>
            </key>
            <one-to-many class="beans.Appendix"/>
        </set>

这样写死就OK了。ABCD的hbm配置文件都改一下,只需要改配置就可以了。问题解决了。

如果不是写死,而是用动态的话……貌似得用filter标签什么的,就不太了解了。Hibernate的路,我还有很长要走啊……

0
0

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26086次
    • 积分:660
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:28篇
    • 评论:1条
    文章分类
    最新评论