【发布时间】:2012-11-26 08:43:57
【问题描述】:
我在 mysql 上使用这个查询(tbl1 中的每条记录都有 tbl2 中的记录列表):
select tbl1.id, tbl2.id from parenttable1 tbl1 join childtable2 tbl2 on tbl1.id = tbl2.tbl1Id
结果是真的,但是当我在我的应用程序中将其用作本机查询 (javax.persistence.EntityManager#createNativeQuery()) 时,会重复 tbl2.id。有什么问题?
结果是这样的:
id id
11 1
11 1
22 3
33 4
44 5
44 5
44 5
但我希望:
id id
11 1
11 2
22 3
33 4
44 5
44 6
44 7
我的代码是这样的:
List<MyDTO> foundList = (List<MyDTO>) entityManager.createNativeQuery("the query above",
MyDTO.class).getResultList();
【问题讨论】:
-
原生查询是什么意思?
-
我的意思是 javax.persistence.EntityManager#createNativeQuery()
-
这样的查询结果怎么会是
true?向我们展示您的代码、您的数据、您期望的结果以及您获得的实际结果。 -
这有什么问题?!结果是表 1 记录的 ID 和表 2 记录的 ID(结果数是表 2 中的记录数,例如,如果表 1 中有 5 个父记录,表 2 中有 10 个子记录,则结果将包含 10记录,因此 tbl1.id 可以重复,但 tbl2.id 应该是唯一的)
-
如果查询返回,这可能意味着您实际上在子表中有重复的记录,或者您忽略向我们展示的代码做了一些奇怪的事情。确保 child_table.id 上存在唯一或 PK 约束。您可以简单地将 distinct 关键字添加到查询中,但这会隐藏问题而不是解决问题。
标签: sql jpa join entitymanager nativequery