Java-DTO接口target.targetSource值null->&引用;“一些价值”;

Java-DTO接口target.targetSource值null->&引用;“一些价值”;,java,spring-boot,interface,dto,Java,Spring Boot,Interface,Dto,我使用DTO接口从自定义Spring/Boot存储库方法中获取数据。然后使用DTO拾取真实实体。为了进一步解释,以下是我的实现: 公共接口模块标题到{ 长getId(); 字符串getReference(); 字符串getModuleName(); } @存储库 公共接口模块Repository扩展了Crudepository{ @查询(“从ModuleEntity中选择U.id、U.moduleName、U.reference作为U,其中U.reference=:reference”) mo

我使用DTO接口从自定义Spring/Boot存储库方法中获取数据。然后使用DTO拾取真实实体。为了进一步解释,以下是我的实现:

公共接口模块标题到{
长getId();
字符串getReference();
字符串getModuleName();
}
@存储库
公共接口模块Repository扩展了Crudepository{
@查询(“从ModuleEntity中选择U.id、U.moduleName、U.reference作为U,其中U.reference=:reference”)
moduleEntityToGetByReference(@Param(“reference”)字符串引用);
}
调用
getByReference
方法后,我将使用返回的DTO获取实体的真实实现,然后将实体传递给Student对象并保存到其中:

moduleEntityTo moduleEntity=this.moduleRepository.getByReference(module.getReference().toString());
可选的fullModule=this.moduleRepository.findById(moduleEntity.getId());
if(fullModule.isPresent()){
setModules(fullModule.get());
this.timeTableRepository.save(targetEntity);
}否则{
抛出新异常(ErrorMessages.CANNOT_FIND_MODULE(MODULE.getReference()));
}
}
这就是事情变得奇怪的地方;此调用
Optional fullModule=this.moduleRepository.findById(moduleEntity.getId())
弹出并返回错误:
给定的id不能为null!;嵌套异常为java.lang.IllegalArgumentException:给定的id不能为null

我认为这是有道理的,但当我开始进一步调试时,我发现:

所以我们有
null->“一些值”


这是什么意思?它是空的吗?它不是空的吗?运行时显示null,但调试器显示null和value。我怎样才能得到这个值呢?有人能解释一下这里发生了什么吗?

也许您可以调整存储库实现,将实体作为
可选值返回。在服务层中,可以对结果进行空值评估以及DTO转换

Optional<ModuleEntity> module = moduleRepository.getByReference(id);

ModuleEntityDTO moduleEntity = module.map(moduleMapper::toDto).orElseThrow(() -> new ResourceNotFoundException(id, "Module not found"));

Optional<ModuleEntity> fullModule = this.moduleRepository.findById(moduleEntity.getId())
Optional module=moduleRepository.getByReference(id);
moduleEntityTo moduleEntity=module.map(moduleMapper::toDto).OrelsThrow(()->new ResourceNotFoundException(id,“找不到模块”);
可选fullModule=this.moduleRepository.findById(moduleEntity.getId())