只是一个猜测,但是在“纯JPA”中,有一个EntityManager的方法称为 getReference
。它旨在检索其中仅包含ID的实体。它的使用主要是为了指示引用的存在,而无需检索整个实体。也许代码可以告诉更多信息:
// em is EntityManagerDepartment dept = em.getReference(Department.class, 30); // Gets only entity with ID property, rest is nullEmployee emp = new Employee();emp.setId(53);emp.setName("Peter");emp.setDepartment(dept);dept.getEmployees().add(emp);em.persist(emp);我假设 getOne 可以达到相同的目的。为什么生成的查询与您询问的相同?好吧,JPA圣经中的 AFAIR-Mike Keith和MerrickSchincariol编写的Pro JPA2- 几乎每个段落都包含类似“行为取决于卖方”的内容。
编辑:
我已经设定好自己的设定。最后,我得出的结论是,如果您以任何方式干扰使用 getOne
提取的实体(甚至转到entity.getId()),它将导致SQL被执行。尽管如果仅使用它来创建代理(例如,如上面代码中所示的关系指示符),则什么也不会发生,也不会执行其他SQL。因此,我假设在您的服务类中您对此实体进行了某些操作(使用getter进行记录),这就是为什么这两种方法的输出看起来相同的原因。
具有示例代码的ChlebikGitHub
有用的问题#1
有用的问题#2



