Cayenne 有很多非常好的功能,而且从好的方面来说,您可以在项目中使用许多开源工具。Hibernate 适合某些人,而 Cayenne 适合其他人。我知道,对于更多自己的使用,Cayenne 远远优于 Hibernate,主要是由于以下因素:
- 一个非常有帮助的用户社区。Hibernate 可能有点粗糙。
- 具有大量测试的非常健壮的代码库,可提供较大的代码覆盖率
- ROP(三层)支持。如果您需要,这本身就是一个巨大的功能。
- 良好的继承支持
- Cayenne 建模师
是的,Cayenne 方法是对象实体(映射到数据库的 Java 客户端)扩展了一个超类。与 Hibernate(Cayenne 控制整个对象生命周期)相比,这为您提供了一些明显的优势,并为某些人带来了复杂性。
我还发现 Cayenne 管理 Context(一组对象和稍后将一起提交的更改)的方式非常直观。
至于你的问题:
1) Cayenne 绝对可以让您创建对象实体,而无需与表的一对一映射。我们一直这样做,尤其是在对继承建模时。
2) SQLTemplate 将让您获得命名查询,但您会发现大多数 ORM 会引导您远离这种方法,因为您正在与 ORM 直接在数据库中构建查询的自然方式背道而驰。关键是尽可能抽象数据库。
3) SQLTemplate 可以让你做任何你想做的事。但同样,采用 ORM 是一种编写应用程序的策略,而不仅仅是 JDBC 的轻量级包装器。我相信收益是巨大的,我们的项目也从中受益,但这取决于您的目标。