Почему мой сопоставленный список DTO пуст? Каков наилучший способ отобразить и сохранить списки детей? - PullRequest
0 голосов
/ 27 октября 2018

У меня есть простая проблема - но я думаю: «Я стою на трубе». У меня есть api с пружинной загрузкой с JPA, Modelmapper, Entities и DTO. Но отображение не работает.

Объекты:

@Getter
@Setter
@MappedSuperclass
public class AbstractEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
}

@Getter
@Setter
@Entity(name = "contacts")
public class Contact extends AbstractEntity {
  @NotBlank
  private String firstName;
  @NotBlank
  private String lastName;
  @Valid
  @OneToMany(mappedBy = "contact", cascade = CascadeType.ALL, orphanRemoval = true)
  private List<PhoneNumber> phoneNumberList;
}

@Getter
@Setter
@Entity(name = "phone_numbers")
public class PhoneNumber extends AbstractEntity {
  @NotBlank
  private String label;
  @NotBlank
  private String number;
  @ManyToOne
  @JoinColumn(name = "contact_id", referencedColumnName = "id")
  @Setter(value = AccessLevel.NONE)
  private Contact contact;
}

DTO:

@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContactDTO {
  private Long id;
  private String firstName;
  private String lastName;
  List<PhoneNumberDTO> phoneNumberDTOList = new ArrayList<>();
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PhoneNumberDTO {
  private Long id;
  private String label;
  private String number;
}

Мой ModelMapperConfig:

  @Bean
  public ModelMapper modelMapper() {
    ModelMapper modelMapper = new ModelMapper();
    modelMapper.getConfiguration()
        .setFieldMatchingEnabled(true)
        .setFieldAccessLevel(AccessLevel.PRIVATE);
    return modelMapper;
  }

Repo:

public interface ContactRepository extends JpaRepository<Contact, Long{
}

Сервис (только метод создания):

  @Override
  public ContactDTO createOne(ContactDTO contactDTO) {
    Contact contact = modelMapper.map(contactDTO, Contact.class);
    contactRepository.save(contact);
    return contactDTO;
  }

Это правильный способ сохранить контакт с несколькими телефонными номерами?

А как мне создать простое сопоставление?

Если я хочу сохранить его, появляется ошибка:

Column 'contact_id' cannot be null
...