愚人码头

知耻而后勇,知不足而进
随笔 - 33, 文章 - 1, 评论 - 26, 引用 - 0
数据加载中……

对hibernate的新认识

        最近项目接触的新架构让我对Spring和Hibernate又有了新的认识,以前使用Hibernate的时候并不是从真正的ORM角度来考虑的,我想ORM真正的目的是让我们不需要去关注数据库表与表之间的关系,而是考虑Entity对象之间的关系,将关注点从表与表之间转移到对象与对象的关系上。

        以前在使用hibernate的时候,经常由middlegen或其他工具生成Entity类后就不再改动,或者只对一些字段属性进行改动,而现在这个架构在使用的时候,所有的entity之间的业务逻辑都是实现在entity类里面,如有Account, User, Balance这三个实体类,一个User可能有多个Account, 一个Account的对应一个Balance,如果需要添加一个新的User,同时再创建一个默认的Account, 这样的逻辑我以前会把他们都在Service层中实现,而现在的做法是直接在User类中设置一个addAccount的方法,在createUser的时候进行调用,而创建User时则是调用一个Factory进行创建。这样就将业务逻辑全部封装在entity类中,除了一些查询之外,而这写对象也就成了domain对象。

        当然,在客户端调用的时候我们还是通过一个Service来调用domain对象的,这个Service是由Spring维护的,在每个service方法中都会存在Hibernate的Session,这样在持久化的时候,只需要flush一下就可以将所有的domain对象持久化到数据库中。在当前框架中,表现层使用的是GWT,而hibernate session则使用Spring的SessionInViewInterceptor将session一直传播到表现层,这样在Lazyload的时候就不会出现问题。所有domain对象的ID都是由AspectJ静态织入,因为在使用的时候,要避免对ID进行操作,如根据ID进行查找之类的,因为ID都是无业务的主键。

       在hibernate mapping file中,所有实体的关系都体现在里面,包括subclass, map,list之类的数据结构,这些结构之前我很少用到,看来对hibernate的理解还是有些差异,仅仅局限在了简单的使用上,却忘了其精髓----ORM,从对象的角度考虑

posted on 2008-01-30 11:14 船夫 阅读(1948) 评论(7)  编辑  收藏 所属分类: java技术

评论

# re: 对hibernate的新认识  回复  更多评论   

从软件工程角度,hibernate不被提倡,它要求使用者有很高的技巧,如果是单个人没有问题,如果是群体,这项技术就不被看好,不可能每个人都是博士.
2008-01-30 12:13 |

# re: 对hibernate的新认识  回复  更多评论   

不用hibernate同样能实现你的业务逻辑
2008-01-30 12:38 | e

# re: 对hibernate的新认识  回复  更多评论   

@听
不是吧,Hibernate有很好的封装,大家用起来很方便呀。
学习的曲线也不是很陡,不用要求每个人都是专家,只要会基本的操作就OK,但一个Project里至少有一个人是这方面的专家。
2008-01-30 13:05 | Robin's Java World

# re: 对hibernate的新认识  回复  更多评论   

其实hibernate在使用起来并不困难(缓存配置和事务隔离级别的设置还是需要一些全面的考虑的),真正的意义是考虑角度的改变,从我们以往的表之间的关系变成了实体类的关系
2008-01-30 13:48 | 船夫

# re: 对hibernate的新认识[未登录]  回复  更多评论   

我也认为hibernate想要用起来应该算是门槛比较低的了。只是一些复杂机制,如继承、多对多的中间表、何时使用MAP等问题才需要专家来处理。对于一般的开发者来说专家做好了映射,培训一下模型概念,使用起来仍旧是比较容易的一件事。
另外,我认为lazy可以使得我们在处理业务逻辑时,不用被加载数据问题而打断思考。这个不是其他方案可以提供的能力。
2008-01-30 14:17 | Feng

# re: 对hibernate的新认识  回复  更多评论   

最主要的是稳定性的问题,如果hibernate内容表与表之间关系太多,就会出一些莫名奇妙,让你被老板BS的问题.
2008-01-31 12:13 | Alexander.Yu

# re: 对hibernate的新认识  回复  更多评论   

这种问题目前我到还没遇见过,而且当前项目的表结构还是比较复杂的,我知道hibernate如果不进行缓存配置的话,性能有的时候会有问题,至于稳定性的问题我倒是还没遇到过
2008-01-31 14:13 | 船夫

只有注册用户登录后才能发表评论。


网站导航: