陷阱和实际用例:Toplink,Hibernate,Eclipse Link,Ibatis

Mar*_* K. 3 hibernate jpa ibatis toplink eclipselink

我使用Hibernate作为我的JPA实现工作了很多.在大多数情况下,它工作正常!但我也看到了很多陷阱:

  • 使用持久化对象进行远程处理很困难,因为Hibernate用自己的集合实现替换了Java集合.所以每个客户端都必须有Hibernate .jar库.你必须注意LazyLoading异常等.解决这个问题的一种方法是使用webservices.
  • 对数据库进行脏检查而没有任何锁定.
  • "延迟SQL"导致数据访问不符合ACID.(丢失数据......)
  • 隐含更新>>因此我们不知道对象是否被修改(提交导致更新).

Toplink,Eclipse Link和Ibatis是否存在类似问题?我应该什么时候使用它们?他们有类似的表现吗?是否有理由选择Eclipse Link/Toplink ...而不是Hibernate?

Mig*_*ing 5

我可以分享我相当多的Hibernate陷阱:

  • Criteria API不是类型安全的
  • Criteria API设计相对较差(例如:您无法检索当前别名)
  • 如果您创建别名,则表示您正在强制进行内部联接(这是在文档中,但会产生误导)
  • 不支持UNION
  • 没有简单的方法来" 解除代理 "持久对象(第三方支持远程处理)
  • 不支持没有PK的表(我现在它很笨,但它发生在遗留模式中)
  • 没有简单的方法来使用非PK列的序列(不是那么愚蠢)

至于大多数JPA实现,我总是发现我必须依赖一些自定义注释,或者做一些JPA规范中没有涉及的东西.