我正在修改现有的 POJO 以包含 boolean 字段,并希望根据 boolean 值显示所述类别。
为此,我更新了 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 配置的映射:
<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
我尝试过的事情:
- 将
类别
中的数据类型从 boolean 值更改为 boolean 值 - 在 hibernate 配置中将类型从
boolean
更改为java.lang.Boolean
如果我删除上面的 list()
方法中的条件,则此 POJO 用于的 Web 表单显示得很好,但它会显示所有类别,无论状态如何。
还有其他选择可以尝试吗?
最佳答案
如果您将 Java 代码切换为使用 Boolean
而不是 boolean
,如下所示:
private boolean enabled = true;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
关于java - Hibernate - 访问新数据字段时无法解决属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21735018/