创建exposure时出现DBNullConstraintException该如何排查
创建Exposure时DBNullConstraintException异常排查方案
异常说明
该异常为Guidewire实体持久化过程中触发数据库非空约束的报错,默认输出的日志仅显示异常类型,不会携带具体触发问题的实体、字段信息,可按以下步骤排查:
报错日志原文
ERROR Displaying to the user an exception message that is not a UserDisplayableException in context ID 'NewExposure' com.guidewire.pl.system.exception.DBNullConstraintException: at com.guidewire.pl.system.database.entitywriter.DatabaseEntityWriterImpl.checkForNullConstraintViolation(DatabaseEntityWriterImpl.java:227) ~[pl-10.101.0.jar:?]
排查步骤
1. 开启详细约束校验日志
- 将
com.guidewire.pl.system.database.entitywriter.DatabaseEntityWriterImpl类的日志级别调整为DEBUG,复现问题后即可从日志中获取触发非空约束的实体名称、字段名称 - 调整方式可选以下任意一种:
- 进入Guidewire管理员控制台的日志配置页面,搜索对应类名修改日志级别,实时生效无需重启
- 直接修改
config/logging.xml,新增如下配置后重启节点:
<logger name="com.guidewire.pl.system.database.entitywriter.DatabaseEntityWriterImpl" level="debug"> <appender-ref ref="DefaultLog"/> </logger>
2. 校验Exposure及关联实体的必填字段
- 排查Exposure实体的自定义字段:确认所有标记了
NotNull约束的字段是否配置了默认值,是否在新建Exposure的逻辑中完成了赋值 - 排查Exposure关联子实体:创建Exposure时同步生成的关联对象(如涉方、承保责任、赔付项等)如果存在未赋值的非空字段,也会触发该异常
3. 开启应用层必填校验
测试环境添加启动参数gw.entity.validate.required=true,开启实体保存前的应用层必填校验,抛出异常时会直接返回具体的实体和字段信息,无需到数据库执行时才触发约束报错
4. 排查二开增强逻辑
- 检查所有绑定
NewExposure上下文的增写逻辑,包括PCF页面提交后置逻辑、实体事件触发器、实体监听器中是否存在遗漏的必填字段赋值 - 对比基线版本的新建Exposure默认逻辑,确认是否二开修改了原生必填字段的默认赋值规则
内容的提问来源于stack exchange,提问作者CodeForLife
相关产品推荐
相关产品推荐

