gpt4 book ai didi

java - 子实体的外键在保存时未添加到父实体,一对一

转载 作者:行者123 更新时间:2023-12-04 14:01:53 26 4
gpt4 key购买 nike

我有以下设置:

  • Micronaut 3.x
  • Java 15

我要更新的实体:

@Setter
@Getter
@Entity
@ToString
@Table(name = "single_choice_question")
public class SingleChoiceQuestion extends OrderedQuestion {
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
private SingleAnswer answer;

@Override
public void answer(Answer answer) {
if (answer instanceof SingleAnswer single) {
this.answer = single;
}
throw new IllegalArgumentException("answer is not of SingleAnswer type");
}
}

我试图将其子实体作为上述实体的一部分保留下来:

@Getter
@Setter
@Entity
@Table(name = "single_answer")
public class SingleAnswer extends Answer {
@OneToOne private AnswerOption choice;
}

所有实体都继承自此:

@MappedSuperclass
public abstract class BaseEntity {

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(updatable = false, nullable = false, length = 36)
@Type(type = "pkg.UuidUserType") // Maps UUID to SQL VARCHAR.
private UUID id;

@Version
@Column(nullable = false)
private Integer version;
...
}

基础答案类:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Answer extends BaseEntity {

@Column(nullable = false)
private Boolean correct;

}

下面几行被执行:


@ReadOnly
public class MyService {

@Transactional
public <A extends AnswerDto> A answer(A dto, UUID question) {
var answer = questionsMapper.toAnswer(dto);
answer.setCorrect(isCorrect(dto, question));

var orderedQuestion =
orderedQuestionRepository
.findById(question)
.orElseThrow(() -> new NotFoundException("question", question));

orderedQuestion.answer(answer, false);
orderedQuestionRepository.saveAndFlush(orderedQuestion);

return dto;
}
}

预期行为:SingleAnswer 实例被持久化,其 FK 保存在问题的 answer_id 列中。

实际行为:SingleAnswer 实例已保留,但其 FK 未保存在问题的 answer_id 列中。它们没有以任何方式连接,因此孤儿移除似乎也不起作用。

在检查了 hibernate 的日志后,我可以看到它只执行了 insert 而没有执行 update 问题。

另一个观察结果是,当我删除刷新时,孤儿删除确实有效 - SingleAnswer 不会持续存在,尽管 FK 情况仍未解决。

orderedQuestion.answer(answer);
orderedQuestionRepository.save(orderedQuestion);

我看不出这个非常基本的设置有什么问题,我们将不胜感激。

最佳答案

这个问题非常简单,一个@ReadOnly在某个时候被某人偷偷带进了一个类(class),我没有注意到

关于java - 子实体的外键在保存时未添加到父实体,一对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69756529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com