HIbernate强大的功能
Frank SommerSteve Ebersole:Annotations是一个非常方便的功能,用来详细说明持久层相关的功能。那么有没有情况会让你推荐开发者使用XML映射文件呢?
Steve Ebersole:首先,我想指出这不是一个非此即彼的选择题。用户可以混合和搭配使用代码标注(annotations)和XML映射功能。不过,有两种情况,用户需要使用XML。
第一种情况是,用户在使用“实体名称”的时候,这个功能可以让你能够同时映射一个给定的POJO类到多个实体名称。这对于代码标注(annotations)是不可能的,因此你需要使用XML映射实体之一来实现。
第二种情况是,用户在使用Hibernate的“实体模式”功能的时候。这同样对代码标注(annotations)是不可能的,因为它假定你正在使用POJO。
Hibernate的实体模式的思想是能够以不同方式描述你的域模型。例如,Hibernate支持一个DOM4J实体模式。当你使用DOM4J实体模式的时候,请求Hibernate来为你从数据库中取出一些东西,你所取回的是一个org.dom4j.Element,POJO就是Hibernate的另一种实体模式。
除了实体名称和实体模式外,就完全依靠个人喜好了。
Frank SommerSteve Ebersole:说到代码标注(annotations),那么在Hibernate Annotations和在JPA规范中规定的持久性相关的代码标注(annotations)之间,有什么区别?
Steve Ebersole:区别就是范围大小的问题,JPA通常借助于它的代码标注(annotations)来定义对象/相关性映射架构的一个子集,它定义了一个人想要实现对象持久化的最小的映射架构。
但是,Hibernate Annotations反映了强大的Hibernate功能,例如批量抓取、精选抓取、联合子集映射、类型映射、缓存语义映射等等,这是JPA所不具备的。加上我已经提到的,Hibernate Annotations还包含超出Hibernate Core所能提供的强大的行为。
Frank SommerSteve Ebersole:能透露一点关于与Lucene整合的情况吗?
Steve Ebersole:这个工作是由Emmanuel Bernard领导的,它建立在Hibernate Annotations和Hibernate Core的事件框架之上,其指导思想是托管基于域实体状态的Lucene目录的维护给基于持久性事件的Hibernate。
一旦你更新或删除或插入一个新的实体,Hibernate根据这些操作来启动事件,这样Lucene综合监听器开始执行任何所需要的对Lucene目录的动作。整个计划的漂亮之处是解决方案的简单性:你可以从你的域类的一些注解和Hibernate配置的一些额外的内容中得到全部功能。
Frank SommerSteve Ebersole:你计划在下一个版本的Hibernate中增加什么有有趣的功能?
Steve Ebersole:我正在研究更多的新的HQL功能,例如ad-hoc联合语法和UNION/MINUS查询。
我还在重新研究如何让Hibernate本身与JDBC对话,我们会根据试验结果来决定是不是对消费者用户提供这个功能,作为靠Hibernate会话来访问JDBC的一种可行的选择。
我仍然继续扩展实体模式的功能,在使其更加易用的同时,增加新的标准模式。
Hibernate Lucene和Hibernate Validatator方面,我们也将继续增加功能设置。
原文链接: http://www.artima.com/forums/flat.jsp?forum=276&thread=182271