5

我们正在为我的项目评估业务层和数据层(JDBC)之间紧密耦合的 ORM 解决方案。我开始用 Cayenne 做 PoC。我的要求是这样的 a) 已经存在数据库架构 b) 架构非常精细。即实时java对象只能通过组合表来派生。c)目前我只想执行读取操作(通过输入条件进行精确过滤和排序)

到目前为止,我对 Cayenne 的观察是 1) 表和对象是紧密耦合的。Modeler 不允许创建没有关联表的 java 对象。2) 我找不到简单的方法将命名查询的输出映射到 java 对象,以便我以应用程序需要的方式获取列表。3)我也不确定表达式是否适用于命名查询。

我想知道您对我的要求的最佳选择的意见?

先感谢您。

4

3 回答 3

5

如果我必须选择 ORM 工具或 JPA 提供程序,它不会是 Cayenne,因为它似乎没有被广泛使用,因此它背后的社区不是很大,这是一个问题。因此没有必要讨论技术点,像 Cayenne 2.0 这样的东西是侵入性的,你必须实现一个接口或扩展一个超类(Cayenne 3.0 支持 POJO,但仍处于测试阶段,经过 2 年多......)。不,真的,如果您需要 ORM 工具,我认为没有任何理由不选择 Hibernate,这是事实上的标准。

但...

鉴于您的要求,ORM 实际上可能不是最佳选择,主要是因为 b) 所以我会考虑使用iBatis(它不是​​ O/R 映射器,它是数据映射器)。

于 2010-02-25T22:40:57.930 回答
4

Cayenne 有很多非常好的功能,而且从好的方面来说,您可以在项目中使用许多开源工具。Hibernate 适合某些人,而 Cayenne 适合其他人。我知道,对于更多自己的使用,Cayenne 远远优于 Hibernate,主要是由于以下因素:

  • 一个非常有帮助的用户社区。Hibernate 可能有点粗糙。
  • 具有大量测试的非常健壮的代码库,可提供较大的代码覆盖率
  • ROP(三层)支持。如果您需要,这本身就是一个巨大的功能。
  • 良好的继承支持
  • Cayenne 建模师

是的,Cayenne 方法是对象实体(映射到数据库的 Java 客户端)扩展了一个超类。与 Hibernate(Cayenne 控制整个对象生命周期)相比,这为您提供了一些明显的优势,并为某些人带来了复杂性。

我还发现 Cayenne 管理 Context(一组对象和稍后将一起提交的更改)的方式非常直观。

至于你的问题:

1) Cayenne 绝对可以让您创建对象实体,而无需与表的一对一映射。我们一直这样做,尤其是在对继承建模时。

2) SQLTemplate 将让您获得命名查询,但您会发现大多数 ORM 会引导您远离这种方法,因为您正在与 ORM 直接在数据库中构建查询的自然方式背道而驰。关键是尽可能抽象数据库。

3) SQLTemplate 可以让你做任何你想做的事。但同样,采用 ORM 是一种编写应用程序的策略,而不仅仅是 JDBC 的轻量级包装器。我相信收益是巨大的,我们的项目也从中受益,但这取决于您的目标。

于 2011-05-12T02:31:57.030 回答
0

同意,Cayenne 有很多非常好的功能。但是,如果您的项目需要通过继承完成一些工作(您没有提到它),那么 Cayenne 绝对不是一个选择。它没有做“良好的继承支持”:

水平继承 - https://issues.apache.org/jira/browse/CAY-795 -自 2007 年 5 月 30 日起开放;自 2010 年 5 月 18 日起在http://cayenne.195.n3.nabble.com/Vertical-inheritance-td827636.html上讨论垂直继承

我经常在我的个人项目中使用它,并且生产力的提高非常好。

于 2012-10-18T12:54:57.300 回答