鸟类喜欢持续存在,但有一个关键的细节。调用merge时,参数保持为分离实体,返回值为托管实体(这是因为持久性上下文中的每个实体可能只由一个java对象表示,如果已在上下文中加载分离的实体,则它已经是一个托管实体,因此返回,并且将是与合并参数不同的实例)谢谢

鸟类喜欢持续存在,但有一个关键的细节。调用merge时,参数保持为分离实体,返回值为托管实体(这是因为持久性上下文中的每个实体可能只由一个java对象表示,如果已在上下文中加载分离的实体,则它已经是一个托管实体,因此返回,并且将是与合并参数不同的实例)谢谢,java,entity-framework,hibernate,jpa,Java,Entity Framework,Hibernate,Jpa,鸟类喜欢持续存在,但有一个关键的细节。调用merge时,参数保持为分离实体,返回值为托管实体(这是因为持久性上下文中的每个实体可能只由一个java对象表示,如果已在上下文中加载分离的实体,则它已经是一个托管实体,因此返回,并且将是与合并参数不同的实例)谢谢,是的,正如您所发现的,我对JPA不是100%熟悉:)你的回答很好地解释了。至于为什么它最初是用createQuery等编写的,我现在已经和最初的开发人员谈过了,这与一些监控工具有关,这些工具不能正确地使用find或Criteria来提取查询,


鸟类喜欢持续存在,但有一个关键的细节。调用merge时,参数保持为分离实体,返回值为托管实体(这是因为持久性上下文中的每个实体可能只由一个java对象表示,如果已在上下文中加载分离的实体,则它已经是一个托管实体,因此返回,并且将是与合并参数不同的实例)谢谢,是的,正如您所发现的,我对JPA不是100%熟悉:)你的回答很好地解释了。至于为什么它最初是用createQuery等编写的,我现在已经和最初的开发人员谈过了,这与一些监控工具有关,这些工具不能正确地使用find或Criteria来提取查询,所以他告诉我用createQuery和GetResultListThank来完成这些工作。谢谢,是的,正如您所发现的,我对JPA不是100%熟悉:)你的答案解释得很好。至于为什么它最初是用createQuery等编写的,我现在已经和最初的开发人员谈过了,这与一些监视工具有关,这些工具不能正确地使用find或Criteria来拾取查询,所以他告诉我使用createQuery和getResultList来完成这些操作
public EmailTemplate findEmailTemplateById(long id) {

    LOG.debug("Entering findEmailTemplateById(id='" + id + "')");
    // Construct JPQL query       
    String queryString = "SELECT a FROM EmailTemplate a " +
            "WHERE templateId = :templateId";
    Query query = entityManager.createQuery(queryString);

    query.setParameter("templateId", id);

    LOG.debug("Using query " + queryString);

    List<EmailTemplate> resultList = query.getResultList();

    LOG.debug("Exiting findEmailTemplateByName(id='" + id + "') results size " + resultList.size() + " ( returns null if 0 )");

    if (resultList.isEmpty() || resultList.size() == 0) {
        return null;
    } else {
        return resultList.get(0);
    }

}
@Override
public EmailTemplateEdit findEmailTemplateEditById(long id) {
    LOG.debug("Entering findEmailTemplateEditById(id={})", id);
    return entityManager.find(EmailTemplateEdit.class, id);
}