我有一个JPA模型类,该类按预期工作。几周前,它开始引发错误,并且无法持续。
javax.persistence.RollbackException:
javax.validation.ConstraintViolationException:
One or more Bean Validation constraints were
violated while executing Automatic Bean Validation
on callback event: preUpdate
我提取了ConstraintViolation
,其中指出:
must be greater or equal 0.01
这导致我进入模型中唯一带有@DecimalMin
注释的属性:
@Column(nullable = false, precision = 36, scale = 2)
@DecimalMin("0.01")
@NonNull
private BigDecimal amount;
到目前为止,这听起来很合理,但是奇怪的是,无论amount
的值如何,总是会引发异常。我用amount
的{{1}}进行了尝试,但仍然出现异常。
我仅有的其他线索是在数据库中,1.00
被保留为0.00
的最后一个值。我既不知道这怎么可能,也不知道是否与我的问题有关。
修改
在此问题下的评论提出我需要澄清环境。该数据库已部署在客户方,但他无权访问。该方案是应用程序专有的,并且凭据已加密。因此,除了应用程序之外,没有人可以访问数据库。
应用程序本身分为一个 API 模块和一个 UI 模块。两者都使用相同的 core 模块进行数据库访问。该模型也是核心模块的一部分,并被其他两个模块使用。该API部署在服务器上,并且严格限制了对少数操作的访问。它仅用于其他应用程序进行集成。 UI安装在客户端计算机上,并允许访问更多功能。
数据库中amount
的数量源自UI应用程序。从那一刻起,通过API使用相同操作的任何尝试都失败了,而UI应用程序仍然可以按预期运行。
所有模块都经过版本控制,并在单个构建过程中一起构建,我确实确保所有客户端上的所有版本都相同。