【问题标题】:Hibernate - Unable to resolve property error when accessing new data field休眠 - 访问新数据字段时无法解决属性错误
【发布时间】: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


【解决方案1】:

如果您将 Java 代码切换为使用 Boolean 而不是 boolean 会怎样:

private boolean enabled = true;

public boolean isEnabled() {
    return enabled;
}

public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}

【讨论】:

  • 已经试过了,和getEnabled()一起用了原语和对象。没有任何效果。
猜你喜欢
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2016-02-01
  • 2010-11-01
相关资源
最近更新 更多