org.hibernate.QueryException: 无法解析 属性 但找到另一个 属性
org.hibernate.QueryException: could not resolve property but another property is found
我有实体
@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;
}
}
我制定了休眠标准select
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
此代码
criteria.add(Restrictions.in("crmUser.id", selectedIds));
之所以有效,是因为 CrmLog
table 具有 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));
我有实体
@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;
}
}
我制定了休眠标准select
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
此代码
criteria.add(Restrictions.in("crmUser.id", selectedIds));
之所以有效,是因为 CrmLog
table 具有 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));