gpt4 book ai didi

java - JPA 获取重复的行(结果都具有相同的值)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:02 26 4
gpt4 key购买 nike

我有使用 JDBC 的经验,正在尝试迁移到 JPA。我使用从 Netezza 数据库读取的 eclipse facet 创建了一些实体类。我正在使用带有 TypedQuery 返回的 createNativeQuery。我正在做一个简单的 select * from table。

问题是它对一些表很有效,但在其他表上它返回正确的行数,但它们都是一样的......这是相同的代码,因为我将工作代码复制到另一个类并且只对表名进行了全部更改。我还尝试了由 facet 创建的 namedQuery,它给出了相同的结果。

下面是调用实体类的代码:

@Test
public void test2() {
assertTrue(emf != null);
if (em == null) {
em = (EntityManager) Persistence.
createEntityManagerFactory("web20POC").
createEntityManager();
}
TypedQuery<Dimtask> tq = (TypedQuery<Dimtask>) em.createNamedQuery("Dimtask.findAll", Dimtask.class);
tq.setFirstResult(0);
tq.setMaxResults(10);
List<Dimtask> rlist = tq.getResultList();
for (Dimtask line : rlist) {
System.out.println(line.toString().trim());
}
}

知道为什么当相同的代码用于另一个表时我会用一个表获得所有相同的值吗?

提前致谢。

最佳答案

我遇到了同样的问题。

答案是,如果您的实体中有 @Id 注释,JPA 将威胁那些具有给定 id 的行作为唯一元素。

例如,如果您的数据库中有 3 行,其中此 @Id 注释字段相同,JPA 将使用第一个结果元素并复制它们。

在数据库中你可以看到:

1;编号:111,姓名:AAA

2;编号:111,姓名:BBB

3;编号:111,姓名:CCC

结果将是 JPA 检索的 3 行:

1;编号:111 姓名:AAA

1;编号:111 姓名:AAA

1;编号:111 姓名:AAA

检查实体是否有@Id注解,并检查该字段值在数据库中是否真的是唯一的。

关于java - JPA 获取重复的行(结果都具有相同的值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30516381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com