Java JPA的意外行为
因此,我有一个查询,我正在运行它并从db2获取结果 如果我使用这个查询,它将返回一个名称列表Java JPA的意外行为,java,jpa,jpql,Java,Jpa,Jpql,因此,我有一个查询,我正在运行它并从db2获取结果 如果我使用这个查询,它将返回一个名称列表 String query2 = "SELECT nh.Name FROM NameHistory nh,NameSourcing ns WHERE ns.supplierIcId = nh.nameId "; 但是如果我使用这个查询,我不会得到任何结果。(因为我还有一些其他的回执要做,这些回执在这里是不相关的)—— 我不知道我哪里出了问题,也不知道这件事。对此有何解释?嗯,其中一个表必须是空的。这
String query2 = "SELECT nh.Name FROM NameHistory nh,NameSourcing ns WHERE ns.supplierIcId = nh.nameId ";
但是如果我使用这个查询,我不会得到任何结果。(因为我还有一些其他的回执要做,这些回执在这里是不相关的)——
我不知道我哪里出了问题,也不知道这件事。对此有何解释?嗯,其中一个表必须是空的。这种行为是预期的,与SQL完全相同。使用实体之间的关联,并使用联接。必要时使用左连接。实体中不应该有其他实体的ID。您应该使用关联(ManyToOne、OneToOne等)。@JBNizet-Hmm。。事实上是这样。应该只使用这个。但是像这样使用它,而不是进行关联和联接,难道不是更容易吗?不,一点也不。JPQL只允许有关联的连接。你只能按你现在的方式进行“排序”内部连接,而使用Association,你可以从city-city-where-city.country.continent.name='Europe'中选择城市。您无法在没有关联的实体中导航,这是使用对象的最大优点之一。@JBNizet很好,谢谢。你的建议是使用左连接而不是内部连接,效果非常好。答对 了
String query2 = "SELECT nh.Name FROM NameHistory nh,NameSourcing ns ,BomItem bi,CommodityClassificationSupplierXref ccsx,MaterialMaster mm WHERE ns.supplierIcId = nh.nameId ";