【问题标题】:org.hibernate.QueryException: could not resolve property: composite key in queryorg.hibernate.QueryException:无法解析属性:查询中的复合键
【发布时间】:2014-12-27 07:13:24
【问题描述】:

我正在尝试从具有三列复合主键的视图中获取记录列表。

我尝试将composite key 嵌入entity class。但是我收到了下面提到的错误。视图 (VW_ALERTS) 的列是 C_IDMAT_IDP_MONTHCO_TYPECO_SUBTYPE

这里的复合键是C_ID, MAT_ID, P_MONTH。我正在将它们的属性放入可嵌入类中。

请帮忙解决问题

org.hibernate.QueryException: could not resolve property: coreId of: com.sp.cpem.dto.VwAlerts [FROM com.ct.cpem.dto.VwAlerts d ORDER BY d.cId ASC]

以下代码用于执行 hql。

            Session session = sessionFactory.openSession();
            String hql = "FROM VwAlerts d ORDER BY d.coId ASC";
            Query query = session.createQuery(hql);
            return query.list();

实体类:

            @SuppressWarnings("unchecked")
            @Entity
            @Table(schema = "TIGER", name = "VW_ALERTS")
            public class VwAlerts {

                @Embedded
                private VwAlertsPK vwAlertsPK;

                @Basic
                @Column(name = "CO_TYPE", nullable = true)
                private String coType;

                @Basic
                @Column(name = "CO_SUBTYPE", nullable = true)
                private String coSubType;

用于获取复合键的类

 @Embeddable
            public class VwAlertsPK  implements Serializable {
                @Basic
                @Column(name = "C_ID", nullable = false)
                private BigDecimal cId;

                @Basic
                @Column(name = "MAT_ID", nullable = true)
                private BigDecimal matId;

                @Basic
                @Column(name = "P_MONTH", nullable = true)
                private BigDecimal pMonth;

我希望从视图中获取所有记录。 我尝试使用实体类中的@Id 列,但由于仅返回视图中第一行的重复记录而失败。

【问题讨论】:

  • VwAlertsVwAlertsPK 的课堂上发帖时是否有遗漏的字段?

标签: java hibernate hibernate-mapping


【解决方案1】:

您的实体 VwAlerts 只有 3 个属性 --> vwAlertsPK, coType, coSubType

但在您的 HQL 中,您正尝试访问您的实体中不存在的属性 coreId

FROM com.ct.cpem.dto.VwAlerts d ORDER BY d.coreId ASC

因此,将属性 coreId 添加到您的实体,否则只需更新 ORDER BY 子句,以便您指向实体的正确属性。

【讨论】:

  • 请正确阅读我的回答,您的 Java 类(意味着您的实体)中没有该属性,所以您为什么要在 HQL 中使用它
  • 我改为“FROM com.ct.cpem.dto.VwAlerts d ORDER BY d.VwAlertsPK.cId ASC”。但现在我得到了所需的列表计数。当我迭代列表时,它为我提供了空对象。
  • @Renga,我无法理解您现在遇到了什么错误,请更新您的问题并提供有关您尝试过的内容以及您在错误的完整堆栈跟踪中遇到的异常的详细信息。还要提供有关您的实体的完整信息,任何人都不容易猜出您在您的实体中具有哪些属性。
  • Renga,我有一种预感,你现在的问题是当字段条目的开头有一个小写的 v 时,你正在引用“VwAlertsPK”。
猜你喜欢
  • 2018-03-13
  • 2013-07-25
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多