陷阱和实际用例:Toplink、Hibernate、Eclipse链接、Ibatis
我经常使用Hibernate作为我的JPA实现。在大多数情况下,它工作良好!但我也看到了很多陷阱:陷阱和实际用例:Toplink、Hibernate、Eclipse链接、Ibatis,hibernate,jpa,ibatis,eclipselink,toplink,Hibernate,Jpa,Ibatis,Eclipselink,Toplink,我经常使用Hibernate作为我的JPA实现。在大多数情况下,它工作良好!但我也看到了很多陷阱: 远程处理持久化对象很困难,因为Hibernate用自己的集合实现替换Java集合。因此,每个客户机都必须有Hibernate.jar库。您必须注意懒散加载异常等问题。解决此问题的一种方法是使用Web服务 脏检查是在没有任何锁的情况下对数据库执行的 “延迟SQL”,导致数据访问不符合ACID。(丢失的数据…) 隐式更新>>所以我们不知道对象是否被修改(提交导致更新) Toplink、Eclips
- 远程处理持久化对象很困难,因为Hibernate用自己的集合实现替换Java集合。因此,每个客户机都必须有Hibernate.jar库。您必须注意懒散加载异常等问题。解决此问题的一种方法是使用Web服务
- 脏检查是在没有任何锁的情况下对数据库执行的李>
- “延迟SQL”,导致数据访问不符合ACID。(丢失的数据…)
- 隐式更新>>所以我们不知道对象是否被修改(提交导致更新)
Toplink、Eclipse Link和Ibatis是否存在类似的问题?我应该什么时候使用它们?他们有类似的表演吗?有没有理由选择Eclipse链接/Toplink。。。冬眠 无法评论其他实现,但对于DataNucleus AccessPlatform
--安迪我可以分享我的大量冬眠陷阱:
- 标准API不是类型安全的
- Criteria API的设计相对较差(例如:无法检索当前别名)
- 如果创建别名,则是在强制内部联接(这在文档中,但具有误导性)
- 不支持工会
- 无法轻松地“取消代理”持久对象(第三方支持远程处理)
- 不支持不带PKs的表(我现在认为它是哑的,但它发生在遗留模式中)
- 对于非PK列,没有简单的方法使用序列(不是那么愚蠢)
我们经常听到前Hibernate和前JPA员工的抱怨。Ebean的体系结构没有会话/实体管理器。相反,您需要显式地保存()一个bean,或者将该bean级联到相关的bean。因此,是的,没有Ebean的隐式更新 “不支持具有可空列的组合键(我现在认为这很愚蠢,但它发生在传统模式中)”你是说,我按的是外键?因为PK字段不能为空(因为只有字段的组合是唯一的),所以您是对的。我有一个没有PK的表,我尝试对PK使用唯一约束。Hibernate不会对数据库进行脏检查。实体在setter访问后被标记为dirty,Hibernate还会与修改前获取的实体快照进行逐字段比较。