java - 从 Dto 转换为实体后 getId 上的 NPE(mapstruct 和 modelmapper)
问题描述
我需要一些帮助:)
我有为每个实体提供 ID、创建时间和更新时间的抽象模型:
@MappedSuperclass
public abstract class AbstractModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "native")
@Column(name = "ID", updatable = false, nullable = false)
protected Long id;
@Column(updatable = false)
@CreationTimestamp
protected Timestamp creationTime;
@UpdateTimestamp
protected Timestamp updateTime;
//getters and setters
实体样本:
@Entity
@Table(name = "CUSTOMERS", uniqueConstraints={@UniqueConstraint(columnNames = {"fiscalNumber" , "phoneNumber", "email"})})
public class Customer extends AbstractModel {
//other properties
//getters and setters
}
控制器:
public String saveCustomer(@Valid @ModelAttribute("customer") CustomerDto customerDto, BindingResult result, Model model) {
...
customerService.save(customerMapper.toModel(customerDto));
model.addAttribute("customer", customerDto);
return "redirect:/customer/list";
}
道实现:
public Customer save(Customer model) ... {
if (model.getId() == null) {
return (Customer) session.merge(model);
}
...
}
每次我尝试使用 model.getId 获取 Id 时,都会发生 nullPointerException,即使我使用 Objects.isNull(model.getId()),或者将其包装在 Optional 上
如果我尝试相同但要获得creationTime(model.getCreationTime()),它会按预期工作。
额外信息:NPE 仅在将 modelDto(customerDto) 转换为 model(customer) 后出现,并且仅用于 Id。目前我正在使用modelmapper,但我也尝试过使用mapstruct,但我遇到了同样的错误。我也尝试过各种类型的转换策略。
感谢您的关注 :)
解决方案
推荐阅读
- python - Tensorflow 对象检测 API 中的预测数量限制
- android - 用两根手指缩小/放大“活动”
- python - 动画 QGraphicsPixmapItem
- javascript - 如何在十六进制网格上用图像替换悬停文本
- docker - Filebeat 未使用 docker-compose 运行:设置“filebeat.prospectors”已被删除
- javascript - 将 Mongoose 数据库中的内容上传到 React 组件
- reactjs - 昂贵的功能块 render() 更新
- jquery - 使数据表在更新后保留页面并在表刷新时运行外部函数
- sql-server - 使用 SQL Azure DB 将 Umbraco 8.1.1 部署到 Azure:启动失败
- c# - 需要通过 wsdl 服务参考(Windows c#)获取发送到 Web 服务的数据