版本升级后异常

2024-07-04

使用 Optaplanner v7.11.0.Final 的项目上出现分数持久性问题,我升级到最新版本 (v7.25.0.Final),但出现以下异常:

The externalObject (Etat(super=DbObject(id=11), libelle=RCD, ordre=60)) with planningId ((class plr.domain.Etat$HibernateProxy$EZnO4cSz,11)) has no known workingObject (null).
Maybe the workingObject was never added because the planning solution doesn't have a @ProblemFactCollectionProperty annotation on a member with instances of the externalObject's class (class plr.domain.Etat$HibernateProxy$EZnO4cSz).

我终于发现升级到v7.17.0.Final时不再出现异常。

自 v7.18.0.Final 以来做了哪些操作导致代码失败?

如何修复它?

编辑 : 有关更多信息,这里是相关类

package org.optaplanner.plr.domain;

import javax.persistence.Column;
import javax.persistence.Entity;

import org.optaplanner.core.api.domain.lookup.PlanningId;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Entity
public class Etat extends DbObject {

    @Column
    private String libelle;

    @Column
    private int ordre;

    @Override
    @PlanningId
    public Integer getId() {
        return super.getId();
    }
}

及其超类

package org.optaplanner.plr.domain;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

import lombok.Data;
import lombok.EqualsAndHashCode;

@MappedSuperclass
@Data
@EqualsAndHashCode
public abstract class DbObject {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
}

最后,有史以来最简单的配置:)

<?xml version="1.0" encoding="UTF-8"?>
<solver>
    <!-- To solve faster by saturating multiple CPU cores -->
    <moveThreadCount>4</moveThreadCount>
    <solutionClass>org.optaplanner.plr.domain.PlannifSolution</solutionClass>
    <entityClass>org.optaplanner.plr.domain.Plannif</entityClass>
    <scoreDirectorFactory>
        <scoreDrl>org/optaplanner/plr/solver/score.drl</scoreDrl>
        <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
    </scoreDirectorFactory>
    <termination>
        <secondsSpentLimit>1200</secondsSpentLimit>
        <unimprovedSecondsSpentLimit>300</unimprovedSecondsSpentLimit>
    </termination>
</solver>

整个轨迹是

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:782)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:763)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1213)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1202)
    at org.optaplanner.plr.Application.main(Application.java:64)
Caused by: java.lang.IllegalStateException: The move thread with moveThreadIndex (2) has thrown an exception. Relayed here in the parent thread.
    at org.optaplanner.core.impl.heuristic.thread.OrderByMoveIndexBlockingQueue.take(OrderByMoveIndexBlockingQueue.java:142)
    at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.forageResult(MultiThreadedLocalSearchDecider.java:187)
    at org.optaplanner.core.impl.localsearch.decider.MultiThreadedLocalSearchDecider.decideNextStep(MultiThreadedLocalSearchDecider.java:157)
    at org.optaplanner.core.impl.localsearch.DefaultLocalSearchPhase.solve(DefaultLocalSearchPhase.java:70)
    at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:88)
    at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:191)
    at org.optaplanner.plr.Application$1.run(Application.java:222)
    at org.optaplanner.plr.Application$1$$FastClassBySpringCGLIB$$7557a0d1.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
    at org.optaplanner.plr.Application$1$$EnhancerBySpringCGLIB$$c098b4dc.run(<generated>)
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:779)
    ... 5 common frames omitted
Caused by: java.lang.IllegalStateException: The externalObject (Etat(super=DbObject(id=11), libelle=RCD, ordre=60)) with planningId ((class org.optaplanner.plr.domain.Etat$HibernateProxy$YghGFDSA,11)) has no known workingObject (null).
Maybe the workingObject was never added because the planning solution doesn't have a @ProblemFactCollectionProperty annotation on a member with instances of the externalObject's class (class org.optaplanner.plr.domain.Etat$HibernateProxy$YghGFDSA).
    at org.optaplanner.core.impl.domain.lookup.PlanningIdLookUpStrategy.lookUpWorkingObject(PlanningIdLookUpStrategy.java:66)
    at org.optaplanner.core.impl.domain.lookup.LookUpManager.lookUpWorkingObject(LookUpManager.java:75)
    at org.optaplanner.core.impl.score.director.AbstractScoreDirector.lookUpWorkingObject(AbstractScoreDirector.java:509)
    at org.optaplanner.core.impl.heuristic.selector.move.generic.ChangeMove.rebase(ChangeMove.java:85)
    at org.optaplanner.core.impl.heuristic.selector.move.generic.ChangeMove.rebase(ChangeMove.java:33)
    at org.optaplanner.core.impl.heuristic.thread.MoveThreadRunner.run(MoveThreadRunner.java:139)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

我的理论:

您的代码已经存在错误,但在 7.11 中,OptaPlanner 没有检测到它,也没有快速失败。从 7.18 开始,它确实检测并快速失败,以help you...

据我所知,没有堆栈跟踪,像这样的方法ScoreDirector.lookUpWorkingObject()快速失败,可能是在回调中addProblemFactChange()或者在多线程求解中。无论如何,它都无法根据该实体的 PlanningId 找到工作实体。

请注意错误消息如何显示 PlanningId(通常是Long, String, UUID) 是类的一个实例plr.domain.Etat$HibernateProxy$EZnO4cSz。这违背了你问题中的域模型,它说它是一个整数。在抛出消息的地方放置一个断点并请验证这一点。

潜在原因: - 一般情况下混合附加的 JPA 对象 - 我对此表示怀疑 - 混合附加的 JPA 对象并在没有 JPA @Id 注释的方法上使用 OptaPlanner 的 @PlanningId 注释,导致 JPA 代理该方法。

无论哪种方式,在 OptaPlanner 中使用 JPA 对象之前分离它们都可以解决这个问题。请确认是否修复了该问题,以便我可以在错误消息中添加“也许分离您的 JPA 对象”。

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

版本升级后异常 的相关文章

  • PreAuthorize 注释不适用于球衣

    我正在尝试使用 Spring 安全注释来保护球衣服务 但没有任何运气 我已将此部分添加到 web xml 中
  • 为什么Map有loadFactor而List没有呢?

    当用 Java 创建 Map 或 List 时 它们的默认初始容量都是 10 它们的容量会随着新元素的增加而增长 但是 List 仅在添加第 11 个元素时才会增长 而 Map 在添加第 8 个元素时已经增长 发生这种情况是因为 Map 有
  • 在 Java Swing 应用程序中读取和写入属性文件

    我有一个任务是创建一个 java Swing 应用程序来使用 mysql 数据库做一些事情 我计划在 properties 文件中设置数据库连接属性 在该应用程序中 用户应该能够通过应用程序更改数据库属性 我遇到的问题是如何通过 swing
  • Swing JEditorPane CSS 功能

    我正在 Swing JEditorPane 中显示 HTML 内容 为了更改 HTML 的默认外观 我使用了 CSS 样式表 这很好用 我的问题只是 JEditorPane 不支持完整的 CSS 规范 是否有 JEditorPane 支持的
  • 从 Java 访问 Kotlin 类对象

    我有一个 Kotlin 类 它有一个类对象 例如 public class Foo public class object public val SomeValue Int 0 如果我从 Java 使用此类 如何访问类对象内的 SomeVa
  • Java从受限层调用方法

    我什至不确定这是否可行 但我想询问社区的总体意见 我必须解决以下问题 我的项目有 2 层 一个核心层和一个业务层 该核心层提供业务层 这时候Business类就可以导入Core类 为所欲为了 核心类只能导入核心类并使用其方法 禁止访问业务类
  • 配置 Manuel 容器 IntelliJ Arquillian Wildfly

    我正在使用 intelliJ 运行 junit arquillian 测试 问题是我的测试适用于 maven 命令 但不适用于 arquillian mvn package P arq wildlfy managed 这是我的 pom
  • 如何在 Spring Batch 中从 ItemReader 访问作业参数?

    这是我的一部分job xml
  • 如何将 XML 文件直接写入 zip 存档?

    在不使用第 3 方库的情况下 使用 JAXB 直接将 XML 文件列表写入 zip 存档的正确方法是什么 将所有 XML 文件写入一个目录然后压缩会更好吗 正如其他人指出的那样 您可以使用ZipOutputStream类来创建 ZIP 文件
  • HBase 无法在 Windows 上以独立模式启动

    我下载了HBase 1 0 1在我的 Windows 机器上 无法启动它 我收到以下错误消息 C Users admin Downloads hbase 1 0 1 gt bin start hbase cmd Error Could no
  • 为什么 Stream 没有 toList() 方法?

    使用 Java 8 流时 获取一个列表 从中创建一个流 执行业务并将其转换回来是很常见的 就像是 Stream of 2 1 2 5 filter n gt n gt 0 map n gt n n collect Collectors to
  • Spring-security - AccessDecisionVoter-impl 不会被调用

    我正在尝试创建自定义 AccessDecisionVoter 并在调用它时将其停止在调试中 我在每个方法中都设置了断点 但没有任何反应 spring security xml
  • 如何在javafx中嵌入PApplet?

    所以我让我的处理代码在java中运行 但现在我想将它嵌入到我的 GUI 的 JavaFX 中 我怎样才能这样做呢 我尝试使用以下代码 但它似乎不起作用 package testprocessing import javafx applica
  • Freemarker、PDF、页眉/页脚和分页符

    Freemarker 的一个常见用途是生成 PDF 不幸的是 我必须生成一个包含很多页面的pdf 并且 他们 要求我添加包含一些信息的页眉和包含 第2 60页 等内容的页脚 在网上搜索我找到了如何创建宏模板 但它只共享一些常见标签 如css
  • Spring Boot,JPA 错误:“通过 JDBC 语句执行 DDL 时出错”

    我正在尝试使用一个非常基本的 到目前为止 Spring Boot 应用程序在我的 MySQL 数据库中添加一个条目 我使用了在网上找到的一些零碎内容 这是我试图遵循的代码 netgloo spring boot samples spring
  • 如何在 ADF Oracle 11gR1 中的对话框窗口中的弹出窗口中刷新表

    我正在研究显示一个带有搜索表的弹出窗口的要求 当用户单击弹出窗口中的搜索按钮 提供输入文本框 时 需要使用新的数据集刷新搜索表 我创建了一个populateSearchTable 通过填充数组中的值来生成表的方法deviceListArra
  • “?” 是什么意思?在Java中是什么意思? [复制]

    这个问题在这里已经有答案了 我不知道问号是什么 在java中代表 我正在做一个小程序 一个Nim游戏 正在寻找一本书寻求帮助 并看到这样的说法 int pinsToTake min gt 2 2 1 看不懂 什么会 代表 它可能与 if 语
  • 终极Java版本表(J2EE、Java EE、Servlet、JSP、JSTL)

    我正在寻找 Java EE 或以前称为 J2EE 和 Java SE 的组件分解 E g J2EE 1 3 Servlet 2 3 JSP 1 2 JSTL 1 0 J2EE 1 4 Servlet 2 4 JSP 2 0 JSTL 1 1
  • 使用 Lucene 提取英语单词词干

    我正在 Java 应用程序中处理一些英文文本 我需要对它们进行词干处理 例如 从文本 amenities amenity 中我需要获取 amenit 该函数如下所示 String stemTerm String term 我找到了 Luce
  • 构建失败:程序类型已存在:com.facebook.ads.Ad

    我尝试在 Android Studio 中构建一个模块 它似乎可以在设备上运行 但是当我尝试构建 APK 时 出现错误 Program type already present com facebook ads Ad 这是完整的日志 org

随机推荐

  • 我是否需要显式关闭并处置 SQLConnection?

    SqlDataReader rdr null con new SqlConnection objUtilityDAL ConnectionString using SqlCommand cmd con CreateCommand try i
  • MySQL 连接器错误“服务器时区值中欧时间”[重复]

    这个问题在这里已经有答案了 我的问题 MySQL 连接器 服务器时区值中欧时间 无法识别或代表多个时区 该项目 小型网络项目 JavaEE Tomcat 8 5 MySQL Maven 我的尝试 Maven gt 将 MySQL 连接器从
  • 无法在角度2中实现PUT请求,出现错误“不允许空值”

    我已经在我的应用程序中实现了 GET 请求 并且能够在账户组件 当我单击中的特定行时DataGrid 我得到一个POPUP我可以在其中访问 row data 的窗口 并使用下拉菜单可以更新 DataGrid 但是 当我为下拉列表选择所需的值
  • 通过PID获取进程句柄

    我想通过进程名称获取进程的句柄 我有 PID 但当我使用openProcess要始终获取句柄 它将返回 0 或 180 这是我用来使 PID 正常工作的函数 Handle OpenProcess PROCESS QUERY INFORMAT
  • 以编程方式使 iPhone 振动 [重复]

    这个问题在这里已经有答案了 可能的重复 让 iPhone 振动 https stackoverflow com questions 4724980 making the iphone vibrate 如何以编程方式使 iPhone 振动 任
  • Xamarin Form - 如何更改 ResourceDictionary 中的 TabbedPage 标题字体大小

    我创建了一个TabbedPage有四个ContentPages as the TabbedPage Children with Title The TitleiOS应用程序中呈现的内容非常完美并且能够阅读 然而 在 Android 中似乎T
  • R中逻辑回归的分类表

    我有一个由二分因变量组成的数据集 Y 和 12 个自变量 X1 to X12 存储在 csv 文件中 这是数据的前 5 行 Y X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 0 9 3 86 111 126
  • 如何在cmd / powershell中运行Nuget Package Manager Host

    我目前正在使用更新包Visual Studio 2017 Nuget 包管理器控制台中的命令 我需要从命令提示符使用它 eg nuget Update Package Newtonsoft Json Visual Studio 的包管理器控
  • DynamoDB 中的 UUID 数据类型

    根据规范 UUID 为 128 位或 16 字节 十六进制表示形式为 36 个字符 包括连字符 我正在 DynamoDB 上构建一个新表 并且必须决定计划用 UUID 填充的哈希键的类型 我应该使用这些 UUID 的字符串或二进制哈希键创建
  • 以全屏模式启动 Microsoft Edge

    我正在修理几台用作数字标牌的计算机 因此 我需要一个脚本来在启动时全屏启动 Microsoft Edge 我在设置中设置为默认网站 但我不知道如何全屏启动应用程序 有什么想法吗 通过更改发布的脚本https superuser com qu
  • 检测 gzip 编码以手动解压缩响应,但缺少“Content-Encoding”标头

    我在用net http在 Go 中创建一个库HTTP GET要求 在响应中 我收到 12 个标头 但是当我通过邮递员运行完全相同的查询时 我得到 16 个标头 其中缺少的一项是 内容编码 我明白这一定是一个CORS https develo
  • 在 EF core 中启用迁移吗?

    我正在开始使用 EF Core 2 0 我有一个针对 NET 4 6 1 的控制台应用程序 我有一个非常简单的模型类 以及这个上下文 public class ContextCore DbContext protected override
  • WEBP图像回退

    我在互联网上搜索了很多 找不到可以完整教授的正确示例或完整教程 所以请大家给我推荐一些好的例子 我已经在很多网站上尝试过 WEBP 代码 例如与现代化工具一起使用 检查浏览器支持或使用背景图像 有一篇关于 Stucox 的文章 您可以在其中
  • Phantomjs 可以工作,但速度很慢

    我正在尝试使用 PhantomJS 截取网页的屏幕截图 具体来说 我正在使用捕获的示例espn com from this http skookum com blog dynamic screenshots on the server wi
  • iOS 7 AVPlayer AVPlayerItem 持续时间在 iOS 7 中不正确

    我的应用程序中有以下代码 NSURL url NSURL fileURLWithPath self DocDir stringByAppendingPathComponent self FileName isDirectory NO sel
  • 构建失败:程序类型已存在:com.facebook.ads.Ad

    我尝试在 Android Studio 中构建一个模块 它似乎可以在设备上运行 但是当我尝试构建 APK 时 出现错误 Program type already present com facebook ads Ad 这是完整的日志 org
  • 界面生成器中 UIView 的边框颜色不起作用?

    我正在尝试通过 IB 设置视图的图层属性 除了边框的颜色之外 一切正常 属性layer borderColor 我记得一年前遇到过这个问题 最终我以编程方式解决了这个问题 而且 我仍然可以以编程方式执行此操作 但我很好奇为什么layer b
  • TypeScript .d.ts 语法 - 导出和声明

    我需要帮助尝试了解创建 d ts 文件的正确方法 让我困惑的是有些人使用这种语法 lib a d ts namespace My Foo Bar interface IFoo interface IBar vs lib b d ts dec
  • laravel 5 vue.js csrf 令牌

    我已经花了一段时间让这个 csrf 令牌与 vue js 示例一起使用 但它一直说我没有令牌 我尝试过各种变化 底部 不是头部 而是身体末端之前 html div section conten div
  • 版本升级后异常

    使用 Optaplanner v7 11 0 Final 的项目上出现分数持久性问题 我升级到最新版本 v7 25 0 Final 但出现以下异常 The externalObject Etat super DbObject id 11 l