Luu*_*uan 2 postgresql mongodb spring-data-jpa spring-boot javers
我在Postgres中存储数据时使用此异常"ENTITY_INSTANCE_WITH_NULL_ID"(使用JPA Lazy Load)并将javers存储在MongoDB中
Spring Boot:1.4.0.RELEASE
Sprig Data JPA:1.4.0.RELEASE
Javers:2.3.0
我调试并看到如果object是一个惰性对象,则ID为null:org.javers.core.metamodel.type.EntityType:88"Object cdoId = getIdProperty().get(instance);"
当您将对象提交给JaVers时,其先前版本将从JaversRepository加载并与当前版本(您刚刚传递给commit()方法的版本)进行比较.在这种情况下,JaVers使用GlobalId查询找到以前的版本,因此TypeName +实体ID.这就是实体ID不能为空的原因.
有两种可能性:
如果您使用的是Hibernate,则延迟加载代理会出现常见问题.对于某些查询,Hibernate不返回真正的域对象,而是返回基本为空的动态代理对象(因此为空ID).这种技术可能看起来很聪明,但在Hibernate初始化之前会使你的对象变成垃圾.JaVers提供了HibernateUnproxyObjectAccessHook来执行清理:初始化和取消代理您的域对象.
JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()
此挂钩默认启用javers-spring-boot-starter-sql但不启用javers-spring-boot-starter-mongo.如果您正在使用Mongo starter,请自行创建一个JaVers bean,并启用该钩子,请参阅JaversMongoAutoConfiguration.
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |