采访Gavin King(待续)

来源:互联网 发布:4g网络测试 编辑:程序博客网 时间:2024/04/29 11:44

 

gk

您能告诉我们您最近在忙啥?

我是hibernate项目的创始人,这是个open source ORM的java解决方案。我最近加入了JBoss公司,所以我可以全身心投入hibernate的开发,支持,培训以及咨询方面的工作。同时我也通过JCP在做java持久层标准化的工作。我刚刚和Christian Bauer写完一本叫"Hibernate in Action"的书。

您认为hibernate成功吗?
因为hibernate优雅地解决了经常遇到的问题,而且是个open source和它的实用性,所以很成功。我们认真地认为OO思路应该和关系数据库流畅地在一起工作。

 

什么是您发明hibernate的主要动机?
我想要解决有趣的问题,这个问题对我个人很吸引。我之前对利用EJB2 entity bean来写持久层代码感到很恼火。
还有一点,我想赢得和老板的争论:)

 

你认为EJB3的发布会减小hibernate的需求吗? 这对两者有何好处?譬如说在BMP环境下?
EJB3只是个规范。hibernate会实现这个规范。所以你可以同时使用这2种技术:) 或者有些人对标准化的东西并不十分关心的话,他们还是可以继续使用hibernate。尤其是JSR-220还没标准化的时候。

 

你对Java 5.0的元数据怎么看?你打算支持元数据吗?这真的能替代hbm.xml?
当然!Emmanuel Bernard 正在实现EJB 3.0 hibernate对元数据的支持,而且我们还要扩展hibernate自己的元数据。
我们已经看到很多人用XDoclet元数据来定义hibernate mapping。我确信会有更多人会喜欢JSR-175 annotations。
事实上,我很期望这能在ORM变得普及。

 

Generic会改变hibernate的代码吗?
这不是个大问题。hibernate已经存在模板化的集合类,所以你可以在你的domain model里面得到强类型集合。模板化的集合类甚至可以猜测出关联对象的类型,以及减少你需要写的元数据。但是我认为这不是ORM的重大新特性。

 

你希望JDBC API能做些改动使得hibernate更好更快?

使用JDBC batch update API 来批处理不同的SQL语句。(目前你只能在同一个SQL语句里面设置不同参数)但是我也不想看到很多JDBC的新特性。我只是非常希望厂商能够提供全面的可靠的已经存在JDBC3里面的特性。事实上不同数据库厂商各有自己不遵守规范的地方,而且他们也不关心这些。

 

你能告诉我们hibernate3有哪些新特性?它们能带给用户哪些益处?

最大最革新的新特性是支持参数化" filters ".这可以使你得到查找到的数据的子集。这对于处理temporal, versioned, regional, 以及permissioned 的数据特别有用。事实上,我希望大多数的业务对象使用这个特性,这将成为hibernate不可缺少的特性。

我们还作了大量工作来增强mapping的灵活性,来支持更加复杂(甚至残破)的关系模型。当这些特性整合在一起,hibernate可以应付任何疯狂的数据库,譬如老的现存数据库。而且,它能允许你用自己手写的SQL来覆盖hibernate生成的SQL语句。这给了DBA用手动的方式来自由调试性能。

还有些大的新特性是使我们向JSR-220靠拢。

最后,我们用了大量精力改善细节使新手上手更加方便。希望这能减少hibernate论坛FAQ的提问!


哪些人应该使用hibernate?

如果你要开发比较复杂的应用就能使用hibernate(我一般认为只有10张表或者更少的应用就可以算是比较简单的应用)。不是每个应用都需要domain model,因此不是每个应用都需要ORM。但是如果应用包含很多业务逻辑,也就是说应用不只是简单把表里面的数据展示在页面,在这种情况下实用domain model 是个好办法。

hibernate真正发挥威力的时候是涉及复杂数据模型,使用上百个表以及之间复杂的对应关系。对于这样的应用来说,hibernate可以降低大约25%的代码工作量。而且比手工调JDBC的效率高。这是因为有些性能优化很难靠手工代码优化: caching, outer-join fetching, transactional write-behind 等等。