java布尔字段Hibernate QueryException:无法解析属性
我是个真正的冬眠新手,花了两个小时的时间试图解决这个问题。我正在使用Hibernate4和Postgres9.3
给定CatalogBase类
@MappedSuperclass
public class CatalogBase {
@Id
@Type(type = "pg-uuid")
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
protected UUID id;
}
和派生的用户类
@Entity
@Table(name="erpuser")
public class User extends CatalogBase {
private String lastName;
private String name;
private String email;
private boolean isSystemAdministrator;
@Type(type="org.hibernate.type.StringClobType")
@Column(nullable = false)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="lastname")
@Type(type="org.hibernate.type.StringClobType")
@NotNull(message = "es campo mandatorio")
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(length = 100,unique = true)
@NotNull(message = "es campo mandatorio")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name = "issystemadministrator", nullable = false)
public boolean isSystemAdministrator() {
return isSystemAdministrator;
}
public void setSystemAdministrator(boolean isSystemAdministrator) {
this.isSystemAdministrator = isSystemAdministrator;
}
}
我正在尝试使用Hibernate条件筛选查询的第一个结果。像这样
public boolean existsSystemAdministrator() throws NoSuchAlgorithmException{
Criteria criteria=currentSession()
.createCriteria(User.class)
.add(Restrictions.eq("isSystemAdministrator", true));
return criteria.uniqueResult() != null;
}
但我总是得到组织。冬眠QueryException:无法解析属性:isSystemAdministrator异常
我已经改为所有小写,因为数据库字段是这样的,但它也不起作用。从我读到的Hibernate映射的Java属性来看,情况并非如此
我也尝试将isSystemAdministrator字段改为Boolean而不是Boolean,但也没有成功
我知道这对任何冬眠大师来说都是愚蠢的,如果有人能想出一个能节省我很多时间的答案的话
提前谢谢
# 1 楼答案
问题出在
CatalogBase
类中的@Id
注释中。如果您进行了更改,它将正常工作:在Hibernate中可以有两种访问类型。属性访问(和您一样)或字段访问。Hibernate将从
@Id
或@EmbeddedId
的位置猜测访问类型正如我所知(我不是Hibernate大师),这两种访问类型之间应该没有区别。但有些框架需要具有现场访问权限。无论如何,我不知道为什么您的实现不能用于查询,也没有找到任何其他解释
# 2 楼答案
您应该遵守JavaBeans规范(http://www.oracle.com/technetwork/java/javase/documentation/spec-136004.html)。字段应为“systemAdministrator”,方法应为“isSystemAdministrator”