使用 2 个数据库时 Javers ENTITY_INSTANCE_WITH_NULL_ID

2024-03-08

当我在 Postgres 中存储数据(使用 JPA 延迟加载)并且在 MongoDB 中存储 javers 时,出现此异常“ENTITY_INSTANCE_WITH_NULL_ID”

春季启动:1.4.0.RELEASE

Spring Data JPA:1.4.0.RELEASE

贾弗斯:2.3.0

我调试后发现,如果对象是惰性对象,则 ID 为 null: org.javers.core.metamodel.type.EntityType:88 "对象 cdoId = getIdProperty().get(instance);"


当您将对象提交到 JaVers 时,将从 JaversRepository 加载其先前版本并与当前版本(您刚刚传递给 commit() 方法的版本)进行比较。 在这种情况下,JaVers 使用以下命令查找以前的版本GlobalId查询所以TypeName + 实体ID。 这就是实体的 ID 不能为空的原因。

有两种可能:

  1. 如果空 ID 在此类中是正常的(根据您的域模型),您应该将其映射为值对象 http://javers.org/documentation/domain-configuration/#value-object在贾维尔斯。
  2. 如果您使用 Hibernate,延迟加载代理会出现常见问题。对于某些查询,Hibernate 不会返回真实的域对象,而是返回本质上为空的动态代理对象(因此为 null ID)。这种技术可能看起来很聪明,但会让你的对象变成垃圾,直到它们被 Hibernate 初始化为止。 JaVers 提供HibernateUnproxyObjectAccessHook http://javers.org/documentation/spring-integration/#hibernate-unproxy-hook它负责清理:域对象的初始化和取消代理。

    JaversBuilder.javers().withObjectAccessHook( 新的 HibernateUnproxyObjectAccessHook()).build()

该钩子默认启用javers-spring-boot-starter-sql但不在javers-spring-boot-starter-mongo。如果您使用 Mongo starter,请自行创建一个 JaVers bean,并启用钩子,请参阅JaversMongo自动配置 https://github.com/javers/javers/blob/master/javers-spring-boot-starter-mongo/src/main/java/org/javers/spring/boot/mongo/JaversMongoAutoConfiguration.java.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 2 个数据库时 Javers ENTITY_INSTANCE_WITH_NULL_ID 的相关文章

随机推荐

  • 为什么 Bootstrap 导航栏总是折叠的? [复制]

    这个问题在这里已经有答案了 我更新到了 ng bootstrap 的 v1 0 beta 现在导航栏总是折叠的 当我单击汉堡包来切换菜单时 它会打开 但垂直而不是水平显示内容 我已经包含了下面的导航代码 和以前一样 此时我无法弄清楚问题是否
  • SDK 3.1:如何判断SDK是否使用iOS6账号?

    如果我在 iOS6 中设置了 Facebook 帐户 但用户已将其关闭 则 SDK 只会向我提供 FBSessionStateClosedLoginFailed 状态 由此 我无法判断用户是否在 iOS 中关闭了我们的服务 情况 1 或者没
  • 特定分支的 Github 拉取请求模板

    是否可以为特定分支分配拉取请求模板 使用查询参数是唯一的解决方法吗 查询参数 https help github com articles about automation for issues and pull requests with
  • leaflet Js自定义控制按钮添加(文本、悬停)

    我跟着这个控制按钮传单教程 http www coffeegnome net control button leaflet 这对我有用 现在我想 当我将鼠标悬停在按钮上时显示一些文本 就像缩放按钮一样 当我将鼠标悬停在按钮上时更改按钮的颜色
  • 强制 goroutine 进入同一线程

    有没有办法确保 goroutine 只在特定的操作系统线程中运行 例如 当 GUI 操作必须在 GUI 线程中运行 但可能有多个 goroutine 运行 GUI 代码时 GOMAXPROCS 1 从技术上讲可以完成这项工作 但这违背了多线
  • Visual Studio 中 F# 的代码折叠

    我发现我倾向于用 F 编写很长的源文件 F 中的一些开源项目也有很长的源文件 例如用于 Excel 的 FPersec 和 F 因此 如果 VS 中可以为 F 提供代码折叠 即使是非常有限的支持 那将会非常有帮助 例如 在模块中 我们可以折
  • Java - Swing 在 JTextArea 中设置文本颜色

    我有一个 JTextArea 其文本设置为一串信息 在这串信息中 我有一个变量 我希望将其颜色为红色 为此 我按如下方式编辑该字符串 Result font color red negativeValue font 我希望这会给出结果 其中
  • 即使运行迁移后,Django 编程错误列也不存在

    I run python manage py makemigrations我得到 未检测到任何变化 然后 python manage py migrate我得到 无需申请迁移 然后 我尝试将更改推送到生产中 git推送heroku大师 一切
  • 在页面加载时打开 Colorbox

    我一直在尝试使颜色框在页面加载时工作 但我只能看到带有纯背景的加载 我用了这个代码 fn colorbox id title open true 您可以在这里找到演示 http www bloggermint com demos popup
  • 如何创建调用 IEnumerable.Any(...) 的表达式树?

    我正在尝试创建一个表示以下内容的表达式树 myObject childObjectCollection Any i gt i Name name 为了清楚起见 我缩短了以下内容 myObject childObjectCollection
  • 如何下载一个网页的所有图片并以原来的名称保存?

    我编写了一个小型 Python 脚本 使用 selenium 从网站下载图片 from selenium import webdriver import urllib request class FirefoxTest def firefo
  • XC 测试框架 iOS(XCode 6.1) 测试会话退出(80) 未签入

    我在 XCode 中有一个运行良好的项目 但是当我尝试使用 XCTestCase 测试框架测试它时 出现此错误 测试会话已退出 80 而未签入 可执行文件未提供与当前进程兼容的体系结构 该项目的架构设置是 标准架构 armv7 arm64
  • 从 xml 元素中选择属性

    我试图从我的根节点中选择一个属性 但我在选择部分上不断收到空异常 获取属性值的正确方法是什么 我试图获取属性值的值 SymbolicName xml文档
  • Angular 4 中 Model 对象的 Getter 和 Setter

    如何使 getter 和 setter 在我的模型类中工作 我的目标是在输入 包含日期 更新时计算所选日期的整数值 我打算在 setter 中执行此操作 但 Angular 4 忽略了我模型的 setter 和 getter 我的模型类 e
  • 自定义交叉验证拆分sklearn

    我正在尝试在 sklearn 中拆分数据集以进行交叉验证和 GridSearch 我想定义自己的分割 但 GridSearch 只采用内置的交叉验证方法 但是 我无法使用内置的交叉验证方法 因为我需要某些示例组位于同一折叠中 所以 如果我有
  • 如何在所有控件上显示图层[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个Window这打开了一个无边界的Dialog您可以在其中选择一些选项 设置选项后Dialog关闭和主要Window再次启用 不太难 但是
  • Android ndk std::to_string 支持

    我正在使用 android NDK r9d 和工具链 4 8 但我无法使用 std to string 函数 编译器会抛出此错误 error to string is not a member of std android ndk不支持这个
  • 基本的 Windows 命令(ping、ipconfig)需要管理员权限 - 寻找一个选项

    在我的主电脑 Win 7 64 位 上 像 ping 和 ipconfig 这样的基本 Windows 命令突然需要管理员权限 如果我启动普通的命令行窗口 将不再找到这些命令 X 不被识别为内部或外部命令 可操作程序或批处理文件 如果我使用
  • 恢复 SSL 证书覆盖检查

    我正在编写一个测试来测试我正在部署的服务 为了绕过 ssl 证书检查 我使用下面的代码片段实现了 ssl 覆盖 public static void SSLValidationOverride ServicePointManager Ser
  • 使用 2 个数据库时 Javers ENTITY_INSTANCE_WITH_NULL_ID

    当我在 Postgres 中存储数据 使用 JPA 延迟加载 并且在 MongoDB 中存储 javers 时 出现此异常 ENTITY INSTANCE WITH NULL ID 春季启动 1 4 0 RELEASE Spring Dat