JDO、EJB CMP、Hibernate和Amber比较
JDO、EJB CMP、Hibernate和Amber比较
JDO的优点:
◆JDO的生命周期状态机(lifecycle state machine)是正确的用法。任何其它的O/R映射工具都应该使用JDO的生命周期或者它的子集(例如:如果不支持事务)。记住,JDO生命周期是为 JDO实现服务的。大部分用户不需要了解其中很复杂的内幕。网页Amber生命周期中有些图示。
◆PersistentManager API对如何管理JDO对象的状态有一定的优势和价值。
JDO的缺点:
◆查询(query)支持不完全。它应该使用类似Hibernate的HSQL查询语言,并使用java.sql.ResultSet作为查询结果。
◆用于重载方法的字段扩展让人觉得比较混乱。最好使用类似Hibernate或者EJB/CMP的方法,并重载它们。
Hibernate的优点:
◆有着正确的数据模型。以POJO为基础的模型是个正确的方向。
◆可配置性(例如对象之间的关系)是个很好的基础。
◆HSQL正是O/R映射语言应该有的。
◆有着完整的API
◆采用简明的Session类作为控制流的清洗器,因为它沿用了Connection的模型
Hibernate的缺点:
◆没有使用JDO生命周期,这是不正确的做法。
◆API(例如查询)还是有点混乱。It's better than the alternative, but using java.sql.ResultSet as the foundation would clean it up.
◆API如果作为一个规范的话,还是不够干净。例如,在使用查询参数(query parameters)时,存在一些应用漏洞。
◆我不认为使用类名作为表的标识是件好事。
EJB CMP的优点:
◆采用工厂类(指Home)查找实例比向Session/Connection对象传递参数获取实例要好。
◆ejbSelect跟上面说的类似。
◆查询名称使用abstract schma是一个很好的解决方案。
◆理论上来说,这种模式在某些方案中可以有更好的复用性。
EJB CMP的优点:
◆CMP不属于EJB规范。它并不是个合适的模型去实现这个目的。已经没有合适的(例如非官方)借口去让EJB3.0中保留CMP。
Amber优点:
◆使用JDBC ResultSet和PreparedStatement做查询