【发布时间】:2014-02-12 17:21:48
【问题描述】:
我正在修改现有 POJO 以包含布尔字段,并希望根据布尔值显示所述类别。
为此,我更新了 Hibernate XML 配置并将字段添加到数据库中。我的问题是返回数据时在Criteria.list()方法上抛出了HibernateQueryError,因为Hibernate无法解析新字段。
类别 POJO:
public class Category implements java.io.Serializable {
private long id;
private String name;
private Short displayOrder;
private Boolean enabled;
private Set<Submission> submissions = new HashSet<Submission>(0);
//getters and setters
public Boolean getEnabled(){
return this.enabled;
}
public void setEnabled(Boolean enabled){
this.enabled = enabled;
}
添加映射到休眠配置:
<hibernate-mapping>
<class name="com.jason.app.hibernate.Category" table="CATEGORY" lazy="false">
... other properties
<property name="enabled" type = "java.lang.Boolean">
<column name="IS_ENABLED" />
</property>
... set mapping configuration
</hibernate-mapping>
这就是问题所在:
private boolean hasDisplayOrder;
private boolean isEnabled;
public List<V> list() {
try {
Criteria criteria = getSession().createCriteria(returnedClass());
if (hasDisplayOrder && isEnabled){
criteria = criteria.add(Restrictions.eq("enabled", true))
.addOrder(Order.asc("displayOrder"));
log.info("Category object is enabled, added to criteria");
}
else if (hasDisplayOrder ) {
criteria = criteria.addOrder(Order.asc("displayOrder"));
log.info("Object does not contain enabled method");
}
return criteria.list();
}
catch (RuntimeException re) {
log.error("Could not retrieve list results for class "
+ returnedClass.getSimpleName(), re);
}
return null;
}
日志中第一个条件触发里面的日志语句,然后打印出错误信息。
2014-02-12 12:02:49,482 INFO [com.jason.app.manager.BaseManager] Category object is enabled, added to criteria
2014-02-12 12:02:49,489 ERROR [com.jason.app.manager.BaseManager] Could not retrieve list results for class Category
org.hibernate.QueryException: could not resolve property: enabled of: com.jason.app.hibernate.Category
我尝试过的事情:
- 在
Category中将数据类型从布尔值更改为布尔值 - 在休眠配置中将类型从
boolean更改为java.lang.Boolean
如果我删除上面list() 方法中的条件,则使用此 POJO 的 Web 表单可以正常显示,但无论状态如何,它都会显示所有类别。
还有其他选择吗?
【问题讨论】:
-
请告诉我这个 Category 类的包。我知道在日志中它显示 com.jason.app.hibernate 。但我需要确定
-
是的。这就是域对象及其对应的 CLASSNAME.hbm.xml 映射所在的位置
-
您最近是否在数据库中添加了此列。请检查列名是否拼写正确
-
xml 中的列名正确。该字段最近作为
Number(1)添加到 oracle 数据库中,包含 1 或 0。 -
将您的
getEnabled()更改为isEnabled(),我会使用boolean而不是Boolean(除非该字段实际上可以是null)。布尔字段没有get*方法,但有is*方法。见stackoverflow.com/questions/799280/…
标签: java spring hibernate hibernate-mapping