在我的代码中,我使用JPA EntityManager
来保留对象。我特别坚持的两个实体是Question
和Response
。我还有一个ResponseDAO
,它处理与Response
s相关的各种动作。此DAO中的一种方法是
public void setResponse(Question question, String value) {
Optional<Response> response = getResponse(question);
if (response.isPresent()) {
// update existing Response
response.get().setValue(value);
entityManager.merge(response.get());
} else {
// create new Response
Response response = createResponse(question, value);
response = entityManager.merge(response);
question.getResponses().add(response);
}
}
Question
有一个responses
字段,它是一组Response
-尽管用逻辑编写的方式,集合的大小永远不能大于一个。如果找到与该Response
关联的Question
,则value
应该覆盖先前的值;仅当找不到与该Response
关联的Response
时,才创建一个新的Question
。
但是,我发现并非总是如此。在数据库中查看,有一些Question
与许多Response
相关联。我无法重现这种情况,因此很难诊断出确切原因。我的猜测是,偶尔getResponse()
不会在数据库中找到应该存在的Response
,这可能意味着新创建的Response
可能没有实际上在getResponse()
搜索该Response
时已保留在数据库中。那可能吗?还有其他合理的解释吗?