NPE для getId после преобразования из Dto в Entity (как mapstruct, так и modelmapper) - PullRequest
0 голосов
/ 19 января 2019

Мне нужна помощь в этом :)

У меня есть абстрактная модель, предоставляющая идентификатор, время создания и время обновления для каждого объекта:

@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, и у меня та же ошибка. Я также пробовал различные типы стратегий конвертации.

Спасибо за внимание:)

...