【问题标题】:How mature is Ebean or Siena? [closed]Ebean或Siena有多成熟? [关闭]
【发布时间】:2010-12-03 19:53:05
【问题描述】:

上次我听到很多关于 Hibernate 的抱怨。事实上,我对 Hibernate 也有一些痛苦的经历。所以我读到了EbeanSiena

两者都有有趣的方法。不幸的是,数据库访问层很容易编写,但是如果您的项目增长并且您必须处理出色的数据库表,您就会知道它们是否好用。所以评估这样的工具真的很困难。 Hibernate 是众所周知的,你可以确定你可以用它解决你的问题。有时你需要学习很多东西,但你可以解决它。

Ebean 怎么样?有现实世界的应用吗?支持哪些数据库?靠谱吗?

再搜索了一下,发现ORM-frameworks还有很多,那么至少有一个靠谱的吗?

【问题讨论】:

  • 您能否补充一些关于您在使用 Hibernate 时遇到的问题的具体信息?这将帮助我们消除具有相同限制的 ORM 框架。
  • Hibernate 对于批处理作业来说变得很困难,因为您在其中进行了大量的写入操作。此外,Hibernate 经常有一些令人惊讶的效果,例如,如果您创建或更改了一个对象,它将自动保存。说清楚一点,Hibernate 是一个很好的可靠框架,但它的复杂性和复杂性。如果您是休眠专家,那真的很好,但否则有时您可能会通过尝试理解行为来浪费一整天的开发人员时间。 Siena 和 Ebean 承诺会更简单(这很容易证明)并且也很可靠(没有人可以确认)。

标签: java orm persistence siena ebean


【解决方案1】:

Rob(Ebean 提交者)在这里。

Ebean 现在大约 4 岁以上。我会说它现在相当成熟。支持的数据库包括 Oracle、MySql、Postgres、H2 和 SQL Server(以及最近的 SQLite)。 Ebean 正在做其他 ORM 没有的东西,例如 Autofetch(自动查询调整),所以我不适合“成熟度评级”。 IMO 虽然 Ebean 社区相对较小,但您可能需要访问 Ebean 谷歌群组才能与他们互动。

任何现实世界的应用程序?是的,但你最好真的问 Ebean 社区。当然,对批处理(批处理大小、事务的级联转换等)和我在 JPA 等中看不到的大型查询支持有很好的支持(Hibernate 的无会话支持可能会得到类似的东西)。

希望这可以回答您问题的一小部分。

干杯,罗伯。

【讨论】:

  • 谢谢,这确实是一个有帮助的答案。
  • 您好 Rob,我看到您在 github 上维护存储库,并欣赏 Ebean 的高实用性,但我无法找到最新的文档。 avaje.org 上的东西似乎很古老。是否有任何最近的 Java 文档或指南?
  • @area5one 文档现在是 WIP - 您可以在以下位置查看当前状态:ebean-orm.github.io 这还远未完成,但在下个月我将完成新的文档/网站。
  • @Rob 哦,很好,这看起来很有希望,并且给了使用库的信心。到目前为止,我一直很喜欢 Ebean,所以请继续努力!
【解决方案2】:

我目前是 Siena 的开发人员,但不久之后。让我解释一下为什么我成为这个项目的开发人员? 我去锡耶纳是因为我想使用 Play+GAE,而锡耶纳似乎是 GAE DB 的一个良好开端,我真的很想避免使用 JDO/JPA。 然后,我开始真正欣赏 Siena 的直接、轻量和简单的方法以及如此简单的 API。它不像 JDO 那样伪装成一体式抽象层和像 JPA 这样的最伟大的标准 DB API。它真的让我想到了来自 Python/Ruby 的 DB API,它真的符合我的观点:我想要一个简单的 DB API,它可以让我解决我的大部分问题,当我遇到更复杂的问题时,我会使用较低层的 API,但肯定不是 hibernate 等抽象层。

让我的代码在 GAE DB 或 JDBC 上运行的可能性也是一个很好的方面。再一次,Siena 并没有假装在两个世界中都提供完全相同的东西,因为 SQL 和 NoSQL 并不真正兼容(但 ORM 也不真正兼容 SQL 模型:))。 但再次强调,能够在多个 DB 中依赖相同的 API 是非常实用的。

最后,图书馆是一个罐子,你不必检索整个宇宙来使用它。

所以,我逐渐成为了锡耶纳的提交者,因为我想参与这个美好的小冒险。 现在 siena 团队正在开发一个新版本,保留相同的简单 API,带来新的有趣功能并真正改进所有后端代码,使其更容易扩展新的数据库支持。 Siena 是一个由用户体验驱动的实用 API,这就是我喜欢它的原因 ;)

帕斯卡

【讨论】:

  • 感谢您分享您的经验,即使它并不能显示它有多成熟。我不明白的是为什么我不能在 GAE 和 JDBC 之间切换?我认为这是锡耶纳的一大好处。我的意思是,否则使用特定的“ORM-Mapper”看起来更聪明。
  • 我从来没有告诉过你不能在锡耶纳的 GAE 和 JDBC 之间切换:D...你可以切换,正如你所说,这是锡耶纳的一大好处。但我们并不是说你总是可以在两者之间切换,因为在 SQL 和 NoSQL 之间一切皆有可能。有时,您必须专门为 NoSQL 或 SQL 设计模型以提高效率……我们不会假装解决 NoSQL 和 SQL 之间的所有问题,因为这将是一个谎言。但在绝大多数情况下,开关将毫无问题地工作。
  • 关于成熟度,我不是真正合适的人,因为我暂时为 Siena 编码 :)... 但我知道人们在生产中使用它,他们选择了 Siena 而不是 JDO /JPA 或其他东西,以便有一个非常简单的 API,在他们的代码和 DB 之间有一个薄层......可以肯定的是代码非常小,你只需要一个 jar 并且学习曲线很短.. . 我们目前正在非常仔细地清理代码/设计并实施大量测试,所以我认为 Siena 的质量会越来越好......如果您需要任何东西,请不要犹豫直接与 siena 小组交谈!
  • 根据我在游戏框架和 GAE 方面的经验,使用 JPA 是一条死胡同,只要你需要映射某种关系,它就会简单地显示它的限制......此外,在 play 的 gae 模块上页面,他们推荐 siena 进行 gae 开发:playframework.org/documentation/1.0/gae
【解决方案3】:

我们在MyBatis 方面拥有非常丰富的经验,它本身不是 ORM,而是另一类持久性管理器,即 SQL 映射器。使用它,您可以从 SQL 语句开始,并指导它如何将结果行映射到 POJO。它在概念上很容易理解和调整,里面没有太多的魔法。如果您熟悉 SQL 或需要使用已建立的架构,这是理想的选择。

【讨论】:

  • 是的,我知道,我之前使用过 iBatis,我认为它是可靠的。限制是缺少数据库系统的抽象。如果您必须支持多个数据库系统,如 Oracle、DB2、Postgres 和 Hibernate 等 H2 框架,则非常有用。
【解决方案4】:

除了伊比恩和锡耶纳:

您可以尝试JIRM,它专注于对不可变对象进行 CRUD(是的,我是作者)。

还有jOOQ和Joist。

我觉得JIRM 最大限度地减少了 DTO 的数量,因为域对象是不可变的,不会继承、实现和/或没有“增强/检测”。锡耶纳和伊比恩不一样。

此外,由于对象是不可变的,因此更多地关注每列更新而不是整个对象,考虑到当今的 AJAX 接口,这更有意义(与旧的 POST 整个 bean 模型相比)。

【讨论】:

    【解决方案5】:

    如何使用 EB3,例如 JBoss (www.jboss.org)?

    【讨论】:

    • 好吧,我寻找一个简单的解决方案。 JEE 环境不适合这个。
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2016-10-18
    • 2010-12-22
    相关资源
    最近更新 更多