ModelMapper отображает неверный идентификатор при запуске метода Save JpaRepositoryJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ModelMapper отображает неверный идентификатор при запуске метода Save JpaRepository

Сообщение Anonymous »

Я использую Hibernate для своего проекта Spring Boot. Итак, у меня возникла проблема при использовании метода Save JpaRepository. Когда я пытаюсь сохранить новый элемент Answer, ModelMapper ошибочно считает, что свойство Answer — это queryId, как и ответ объекта Answer, поэтому вместо этого при сохранении нового элемента «Ответ» он обновляет существующий элемент «Ответ» с введенным мною ответом = идентификатор вопроса.
Вот мой ответ и вопрос модель:

Код: Выделить всё

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Answer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int answerId;
private String answer;
private String status;

@ManyToOne()
@JoinColumn(name = "questionId", nullable = false)
private Question question;
}

Код: Выделить всё

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int questionId;
private String question;
private String questionType;
private String status;

@ManyToMany(mappedBy = "questions", cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private Set quizzes;

@OneToMany(mappedBy = "question",cascade = CascadeType.ALL, orphanRemoval = true)
private Set answers;
}
Мой Dto

Код: Выделить всё

public class AnswerDTO {

@NotEmpty
private String answer;

@NotEmpty
private String status;

@NotNull
private Integer questionId;

}
Мой ModelMaper

Код: Выделить всё

@Configuration
public class Config {

@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();

// ignore null attributes on the source object on copying
modelMapper.getConfiguration()
.setSkipNullEnabled(true);
return modelMapper;
}
}
AnswerBuilder:

Код: Выделить всё

@Component
@AllArgsConstructor
public class AnswerBuilder {

private final ModelMapper modelMapper;
public Answer build(AnswerDTO dto) {
Answer model = modelMapper.map(dto, Answer.class);
return model;
}

public Optional build(Answer domain) {
AnswerDTO dto = modelMapper.map(domain, AnswerDTO.class);
return Optional.of(dto);
}

public Answer build(AnswerDTO dto, Answer domain) {
modelMapper.map(dto, domain);
return domain;
}
}
а это мой сервис создания:

Код: Выделить всё

public int createNewAnswer(AnswerDTO dto) {
return Stream.of(dto)
.map(answerBuilder::build)
.map(answerRepository::save)
.map(Answer::getAnswerId)
.findFirst()
.get();
}
Я пытаюсь использовать setMatchingStrategy(MatchingStrategies.STRICT) для ModelMapper, но все идентификаторы вопросов в списке ответов становятся нулевыми. И я не могу сохранить новый элемент. Вот ошибка:

Код: Выделить всё

com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'question_id', table 'SPRINGTEST.dbo.answer'; column does not allow nulls.
Утром я борюсь с этой проблемой, поэтому очень надеюсь, что вы, ребята, сможете помочь. Извините за мой плохой английский

Подробнее здесь: https://stackoverflow.com/questions/790 ... repository
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»