我使用Hibernate作为我的JPA实现工作了很多.在大多数情况下,它工作正常!但我也看到了很多陷阱:
使用持久化对象进行远程处理很困难,因为Hibernate用自己的集合实现替换了Java集合.所以每个客户端都必须有Hibernate .jar库.你必须注意LazyLoading异常等.解决这个问题的一种方法是使用webservices.
对数据库进行脏检查而没有任何锁定.
"延迟SQL"导致数据访问不符合ACID.(丢失数据......)
隐含更新>>因此我们不知道对象是否被修改(提交导致更新).
Toplink,Eclipse Link和Ibatis是否存在类似问题?我应该什么时候使用它们?他们有类似的表现吗?是否有理由选择Eclipse Link/Toplink ...而不是Hibernate?
我可以分享我相当多的Hibernate陷阱:
Criteria API不是类型安全的
Criteria API设计相对较差(例如:您无法检索当前别名)
如果您创建别名,则表示您正在强制进行内部联接(这是在文档中,但会产生误导)
不支持UNION
没有简单的方法来" 解除代理 "持久对象(第三方支持远程处理)
不支持没有PK的表(我现在它很笨,但它发生在遗留模式中)
没有简单的方法来使用非PK列的序列(不是那么愚蠢)
至于大多数JPA实现,我总是发现我必须依赖一些自定义注释,或者做一些JPA规范中没有涉及的东西.