-1

我在 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();

4

2 回答 2

2

如果您不知道应该如何映射这两列,我看不出 JPA 如何将返回具有相同名称的两列的查询结果映射到 DTO。而且你甚至没有展示 DTO 的样子。

执行以下代码,一切都应该没问题:

List<Object[]> list = (List<Object[]>) em.createNativeQuery(sql).getResultList();
List<MyDTO> result = new ArrayList<MyDTO>(list.size());
for (Object[] row : list) {
    result.add(new MyDTO((Long) row[0], (Long) row[1]));
}

下次你被要求展示你的代码时,不要认为它是完美的或显而易见的,并且错误一定来自其他地方。99.999% 的情况下,错误都在您的代码中,而不是在数百万开发人员使用和测试的库的代码中。

于 2012-12-08T11:51:28.063 回答
0

非常感谢你的灵感。问题是 @Id 存在于父表的 id 字段而不是子表的 id 字段(在 DTO 内)!

于 2012-12-09T11:11:59.673 回答