Мне нужна помощь в этом :)
У меня есть абстрактная модель, предоставляющая идентификатор, время создания и время обновления для каждого объекта:
@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";
}
Реализация Dao:
public Customer save(Customer model) ... {
if (model.getId() == null) {
return (Customer) session.merge(model);
}
...
}
происходит каждый раз, когда я пытаюсь получить Id с помощью model.getId, я получаю исключение nullPointerException, даже если я использую Objects.isNull (model.getId ()) или оборачиваю его в необязательный
если я пытаюсь сделать то же самое, но получить creationTime (model.getCreationTime ()), он работает как положено.
дополнительная информация:
NPE появляется только после преобразования modelDto (customerDto) в модель (customer) и только для Id. В данный момент я использую modelmapper, но я также пытался с mapstruct, и у меня та же ошибка. Я также пробовал различные типы стратегий конвертации.
Спасибо за внимание:)