【问题标题】:org.hibernate.QueryException: could not resolve property but another property is foundorg.hibernate.QueryException:无法解析属性,但找到了另一个属性
【发布时间】:2016-05-06 04:33:54
【问题描述】:

我有实体

@Entity
@Table(name = "CRM_LOG")
public class CrmLog implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private @Getter @Setter Long id;
    ..........
    @OneToOne
    private @Getter @Setter CrmUser crmUser;
}

和另一个实体

@Entity
@Table(name = "CRMUSER")
public class CrmUser implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Integer groupId;

public Integer getGroupId() {
        return groupId;
    }

    public void setGroupId(Integer groupId) {
        this.groupId = groupId;
    }
}

我选择休眠条件

criteria.add(Restrictions.in("crmUser.id", selectedIds));

它工作正常。但这个标准不合格

criteria.add(Restrictions.in("crmUser.groupId", filterGroupIds));

我收到一个错误

org.hibernate.QueryException: could not resolve property: crmUser.groupId of: crm.entity.CrmLog

【问题讨论】:

  • 请发布完整的休眠条件查询,在我看来,您使用 CrmLog 作为 root 并希望限制作为 CrmUser 属性的 groupId。

标签: java hibernate criteria


【解决方案1】:

这段代码

criteria.add(Restrictions.in("crmUser.id", selectedIds));

工作因为CrmLog 表有CrmUser id 作为外键列。所以 Hibernate 不需要在 SQL 查询中添加连接。

要对其他CrmUser 属性添加限制,您需要添加别名。这样的别名告诉 Hibernate 将连接添加到 SQL 请求。

criteria.createAlias("crmUser", "user");
criteria.add(Restrictions.in("user.groupId", filterGroupIds));

默认情况下,Hibernate 添加一个内部连接。对于左连接

criteria.createAlias("crmUser", "user", JoinType.LEFT_OUTER_JOIN);
criteria.add(Restrictions.in("user.groupId", filterGroupIds));

JoinType.LEFT_OUTER_JOIN 可以与 Hibernate 5(也许是 Hibernate 4)一起使用

您可以为根实体分配别名。也许这样的例子更清楚

Criteria criteria = session.createCriteria(CrmLog.class, "log");
criteria.createAlias("log.crmUser", "user");
criteria.add(Restrictions.in("user.groupId", filterGroupIds));

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多