【问题标题】:JPQL View returning duplicatesJPQL 查看返回重复项
【发布时间】:2011-08-04 14:21:08
【问题描述】:

我基于在我的数据库上设置的视图创建了一个 Java 实体(在 Eclipse 中)。实体的设置在我的 glassfish 服务器上进行了测试,也通过我运行的 flex 应用程序运行,该应用程序引用了部署的 web 服务中的方法和类。

唯一的问题是行数是正确的,但是返回的值都是重复的!我无法理解为什么会发生这种情况,并且在网络上引用视图时几乎没有发现任何东西,除了它应该与表格几乎相同......它确实但是它返回重复!

作为测试,我创建了一个表,其中包含与视图相同的所有列/数据等,并将 JPA 实体指向该视图 - 瞧……没有重复!

有人知道我在这里做错了什么吗?

这是代码!

EntityManager em = null;
BigDecimal pId = new BigDecimal(conId);


try {
em = emf.createEntityManager();
String applicationQueryString = "select c from VDisc c where c.dCorId = :conId";

Query contdetQuery = em.createQuery(applicationQueryString);
contdetQuery.setParameter("conId",pId);

List list = contdetQuery.getResultList();
VDisciplines[] disc = new VDisciplines[list.size()];
disc = (VDisciplines[]) list.toArray(disc);

return disc;

【问题讨论】:

    标签: database jpa view duplicates jpql


    【解决方案1】:

    您是如何将您的实体映射到视图的,您将什么定义为 ID?另外你是如何定义/执行查询的?

    如果您将某些不唯一的字段定义为 Id,那么您将获得相同 Id 的重复对象。

    您可以尝试对原始数据使用原生 SQL 查询,以确保从数据库中正确返回。

    【讨论】:

    • James - 感谢您回复我,伙计。我认为这可能与 id 的事情有关...我必须删除 @Id 注释,因为每次我运行查询“select c from VDisc c where c.dCorId = :conId”时它一直说它不知道是什么“ID”字段在选择查询中,如“SELECT ID,CON_ID ...”。我猜是不是跟这个有关?问题是,因为它是一个视图,所以视图中没有唯一标识符,只是混合在一起的 ID 和名称!
    • 包括你的 VDisc 类,它必须仍然有一个@Id,否则你会得到一个错误。如果视图中确实没有唯一的字段集,则使用@Id 标记所有属性。
    猜你喜欢
    • 2016-05-08
    • 2019-03-07
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多