相关疑难解决方法(0)

为什么需要JPA中的分离实体?

关于分离实体的问题总是有很多问题!

首先,它们经常导致LazyInitializationExceptionHibernate.是的,有另一个持久性提供程序,它们不会抛出异常,但我认为它们在一致性方面存在一些问题.考虑一下我们有AB实体有reference(@ManyToOne)A从而B需要非空.

我们开始了会话,加载了A实例,然后关闭了会话.之后我们尝试获取参考B.并假设另一个事务刚刚删除了我们AB实例.所以当我们从数据库查询时,我们找不到合适的B实例并得到null!

所以我们的合同被违反了.一些依赖于a.getB()返回对象的事实的代码 将抛出一个NullPointerException.对于持久化实体,这是不可能的,因为我们在获取对象本身的同一事务中具有所有延迟加载,因此所有操作都是原子的(如果我们当然有正确的事务隔离).

当您想要将持久性和分离的实体存储在一个实体中时,也会出现问题Set.这这种情况下,你应该总是覆盖equalshashCode,通常看起来很笨拙,因为我看不到一个很好的办法做到这一点.

要让一个独立的实体回到EntityManager你身边应该使用merge哪个是毛躁的.

所以我的问题是:是否存在真正需要分离实体的合理方案?此外,何时需要混合分离的和持久的实体并将分离的实体合并为一个新的EntityManager

java hibernate jpa

27
推荐指数
2
解决办法
2万
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1