找不到JPA实体

时间:2018-08-08 13:38:02

标签: java jpa

在我的代码中,我使用JPA EntityManager来保留对象。我特别坚持的两个实体是QuestionResponse。我还有一个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时已保留在数据库中。那可能吗?还有其他合理的解释吗?

0 个答案:

没有答案