доброго дня всем,
У меня есть этот API для создания весеннего отдыха, который я собираю, и в настоящее время у меня проблема с методом put на моих контроллерах.
У меня есть вопросник, имеющий отношение к тестовому объекту:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name="question_id", nullable = false, updatable = false)
private Long id;
@Column(name="question_text", nullable = false)
@NotNull
private String question;
@Column(name="question_weight", nullable = false)
@Min(1)
private Integer weight = 1;
@Column(name="question_type", nullable = false)
private String type = "radio";
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "last_modified", nullable = false)
@LastModifiedDate
private Date lastModified;
@ManyToOne(fetch = FetchType.LAZY, optional = false, targetEntity = com.QCMGenerator.QCMGenerator.Model.Test.class)
@JoinColumn(name = "test_id", referencedColumnName = "test_id", nullable = false, updatable = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Test test;
Я написал ранее, спрашивая об этой проблеме, и мне сказали использовать DTO, так что я сделал, и вот мой вопрос DTO:
private Long id;
private String question;
private String type;
private Integer weight;
private Date lastModified;
private TestDTO test;
и этот метод put у меня в контроллере:
@PutMapping("/{questionID}")
public QuestionDTO updateQuestion(
@PathVariable(value = "testID") Long testID,
@PathVariable(value = "questionID") Long questionID,
@Valid @RequestBody QuestionDTO newQuestion
){
if(!testRepo.existsById(testID)){
throw new ResourceNotFoundException("No test with the ID '"+testID+"' was found...");
}
QuestionDTO savedDTO = null;
try {
Question questionEntity = questionRepo.findById(questionID).get();
QuestionDTO questionDTO = convertToDTO(questionEntity);
if (newQuestion.getTest() != null) {
questionDTO.setTest(newQuestion.getTest());
}
if (newQuestion.getQuestion() != null) {
questionDTO.setQuestion(newQuestion.getQuestion());
}
if (newQuestion.getType() != null) {
questionDTO.setType(newQuestion.getType());
}
if (newQuestion.getWeight() != null) {
questionDTO.setWeight(newQuestion.getWeight());
}
Question newQuestionEntity = convertToEntity(questionDTO);
Question saved = questionRepo.save(newQuestionEntity);
savedDTO = convertToDTO(saved);
}catch (Exception e){
System.out.println(e.getMessage());
}
return savedDTO;
}
и я продолжаю получать эту ошибку на моей консоли IDE:
2018-11-18 21: 33: 12.249 WARN 12876 --- [nio-8080-exec-2] ohaiUnresolvedEntityInsertActions: HHH000437: Попытка сохранить одну или несколько сущностей, которые имеют ненулевую связь с несохраненным переходным процессом юридическое лицо. Несохраненный переходный объект должен быть сохранен в операции до сохранения этих зависимых объектов.
Несохраненная временная сущность: ([com.QCMGenerator.QCMGenerator.Model.Test #])
Зависимые объекты: ([[com.QCMGenerator.QCMGenerator.Model.Question # 10]])
Не обнуляемая ассоциация (ы): ([com.QCMGenerator.QCMGenerator.Model.Question.test])
org.hibernate.TransientPropertyValueException: свойство Not-null ссылается на временное значение - временный экземпляр должен быть сохранен перед текущей операцией: com.QCMGenerator.QCMGenerator.Model.Question.test -> com.QCMGenerator.QCMGenerator.Model.Test; вложенным исключением является java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: свойство Not-null ссылается на временное значение - временный экземпляр должен быть сохранен перед текущей операцией: com.QCMGenerator.QCMGenerator.Model.Question.test -> com.QCMGenerator. QCMGenerator.Model.Test
Я надеялся, что кто-то здесь прояснит эту проблему для меня, так как я весь день зависал только на этом единственном методе, или другие методы работают нормально, я пробовал с DTO и без него, и прежде чем добавить его, у меня был проблема с методом, принимающим нулевые значения в определенных полях.
Я очень ценю любую помощь и благодарю всех за помощь.
всем хорошего дня. : D