亲爱的,
我在项目中使用mapstruct(版本:1.5.2.Final,编译器:来自gradle-language-java-7.6.1.jar的IncrementalProcessingEnvironment,环境:Java 17.0.8)。
我试图忽略空值,但它不起作用。你能帮我吗?
上图,packet为null,调用packetToPacketDTO,但在packetToPacketDTO中不为null
同样在最后一张图片上, effectiveDate 应该为 null,但它通过了 null 检查。
我想忽略空值。
我的地图绘制者:
@Mapper( nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE )
public interface PacketItemInstanceMapper{
PacketItemInstanceMapper INSTANCE = Mappers.getMapper( PacketItemInstanceMapper.class );
PacketItemInstanceDTO toDTO(PacketItemInstance entity);
List<PacketItemInstanceDTO> toDTO(List<PacketItemInstance> entities);
default PacketItemInstanceDTO getFirstDTO(List<PacketItemInstance> entities){
if(CollectionUtils.isEmpty(entities)){
return null;
}
return toDTO(entities.get(0));
}
}
这更多是一个 Hibernate 问题。您设置的
nullValuePropertyMappingStrategy
就是您要寻找的内容。
@Mapper( nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE )
但是,正如您在调试器内部看到的那样,您持有一个 Hibernate 代理 (
product = {Product$HibernateProxy$X2....}
)。 getter 将加载其后面的数据,该数据not null。您可以通过在调试器中评估 product.getEffectiveDate()
来看到这一点。
在您的情况下,您可能需要取消代理
product
,或者找到其他方法从数据库加载它。例如,请参阅 Thorben Janssen 的这篇文章。