JDO、EJB/CMP、Hibernate和Amber比较
|
JDO的优点: ● 采用简明的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做查询 出于某些原因,O/R映射工具通常抛弃强大的ResultSet和PreparedStatement API,而创建自己一套并不是很合适的替代品。O/R查询器应该使用一个外部的SQL(例如HSQL)作为查询语言,并使用ResultSet作为结果集,使用PreparedStatement处理查询参数。可以增加其它的API作为查询子集,就像查询一个单独的实体,但应该使用ResultSet和PreparedStatement作为基础。 Amber缺点: ● Amber的研究价值远大于它的使用价值 原文内容: HSQL is just about what an O/R map language should be. The API is adequate. The explicit Session makes the control flow cleaner, since it follows the Connection model. Hibernate cons: It doesn"t use the JDO lifecycle model. This is incorrect. The API, esp the query, is still a bit messy. It"s better than the alternative, but using java.sql.ResultSet as the foundation would clean it up. The API isn"t clean enough for a spec, i.e. it has a number of implementation hacks, esp with the query parameters. I"m not convinced using the class name as the table identifier is a good thing. EJB/CMP pros: The factory (home) classes are nice for finding instances rather than passing extra parameters to a Session/Connection object. The ejbSelect is similarly Using the abstract schema for the query names is a good solution In theory, the model can allow for efficient object reuse in some cases EJB/CMP cons: CMP does not belong in the EJB spec. It"s been contorted to follow a model that"s not appropriate for the task. There"s no valid, i.e. non-political, excuse for keeping CMP in EJB 3.0. Amber pros: Using the JDBC ResultSet and PreparedStatement for queries. For some reason O/R mappers generally throw out the powerful ResultSet and PreparedStatement API and create their own hacked up and inadequate replacements. O/R queries should use an extended SQL like HSQL as the query language and use ResultSet for results and PreparedStatement for query parameters. Other specialized APIs can be added for particular subsets, like quering a single entity, but the foundation should be ResultSet and PreparedStatement. Amber cons: Amber is an experiment rather than an actual competing API. 源代码网推荐 源代码网供稿. |
