Dav*_*ann 5 java hibernate jpa eclipselink jakarta-ee
尽管我需要这个答案来更好地理解如何在 Wildfly 8.1 中集成 Vaadin 7 和 JPAContainer 插件,但这是一个适用于 Hibernate 和 Eclipse-link JPA 实现的一般问题。
JPACaontainer Vaadin Addon 建议为整个 servlet 会话使用 EntityManager,这个 IMO 不是一个好的设计,因为据我所知(请纠正我)来扩展它总是更好地使用无状态 EntityManager-Per-Request 模式
JPAContaner 插件指出:
Hibernate 和 EclipseLink 在实现级别上有什么区别,使得这两种说法成立?或者,这两个陈述首先仍然有效吗?
我只能代表 Hibernate,所以这是我的想法:
Hibernate 支持长时间会话,您可以选择使用
乐观锁定机制将防止丢失更新,因此会话越短,发生过时异常的可能性就越小。
如果抛出任何约束违规,会话确实无法使用,这使得“扩展会话”比使用“分离实体”更脆弱。
对于分离的对象,您可以在整个对话过程中保留对计划管理的实体的引用,并且仅在工作流程结束时重新附加它们(或合并它们)。
如果会话抛出异常,则必须回滚事务并丢弃会话。异常发生后Session的内部状态可能与数据库不一致。
如果内部会话状态无法再同步到数据库(由于约束违反异常或乐观锁定异常),则会话不再可用,您必须重新启动新的干净会话。否则,只要当前实体过时或具有无效数据,您就会继续收到保存异常。
一种替代方法是清除会话并放弃所有当前未决的更改,这些更改最终会引发异常,或者刷新失败的实体。
我想知道 EclipseLink 如何在这些场景中工作,因为损坏的会话并不总是可恢复的,就像当您拥有过时的数据并且刷新将意味着“丢失更新”时。
| 归档时间: |
|
| 查看次数: |
3597 次 |
| 最近记录: |