谈一点我对hibernate关联关系映射的看法

hibernate作为持久层框架,除了实现最基本的ORM外,最重要的就是关联关系映射。通过配置实体间的关联,如one-to-one、one-to-many等,可以实现级联保存,级联查询等级联操作。最近在研究hibernate的关联映射,最后感觉:hibernate关联映射没太大用处,尤其是级联修改没有用,级联查询还有些用但是很鸡肋,这只是我个人的看法。我参与过几个项目,都没有使用hibernate关联映射;而且经过我自己的尝试,发现关联映射确实很难用。


首先我认为:级联保存、级联修改和级联删除是没有什么实际用处的。hibernate级联,无非是配置inverse和cascade等属性。经过我自己的尝试,使用级联操作,hibernate并没有什么特别的。我们完全可以程序里面自己控制:插入的时候,先插入父表再插入子表;删除的时候,先删除子表再删除父表。而且在代码中控制,语义更明显,效率上和hibernate也没有差异,而且实现难度也比配置级联更容易


下面来看下级联查询:感觉也很鸡肋,主要是因为很难过滤关联的实体。可以先看下“Criteria查询”和"<set>中使用filter"这2篇文章。


想对关联实体过滤,的确可以通过Criteria或者filter或者<set>的where属性实现。但问题在于:使用where,只能写死在hbm.xml中,不能参数化;使用filter和Criteria略显繁琐,不过还好,也不是大问题。


使用HQL或者Criteria查询,无法回避一个问题:一旦在实体映射文件中配置好关联关系后,当访问关联实体的时候,hibernate会发出查询语句再次查询关联的实体,除非我们自己去设置关联的实体对象。使用filter或者where,既可以实现关联实体的懒加载,也能够实现关联实体的过滤,由于where不能参数化所以没有什么用,filter虽然略显繁琐,但是综合起来看应该是最佳选择了。


如果不需要对关联实体进行过滤,就是要在需要的时候查询出所有的关联实体,那么hibernate的关联查询确实很好用。但是如果要对关联实体过滤,那么就得稍微费一些工夫了。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值