java - Hibernate - 访问新数据字段时无法解决属性错误

标签 java spring hibernate hibernate-mapping

我正在修改现有的 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/

相关文章:

java - 如何阻止WebSphere自动创建EntitMangerFactory?

sql - JPA 或数据库架构中的外键级联

java - Maven 程序集插件 chmod 输出文件夹

java - hibernate 中打开的 session 是否一定意味着我已连接到数据库?

java - 如何向RList添加双元素?

java - 指定注释处理器的顺序

java - JUnit测试中如何将MockWebServer端口设置为WebClient?

java - 重写在父类中为 EntityManager 声明的持久上下文 unitName。

java - 当我使用 @JsonProperty 通过 Spring 数据从 MongoDB 检索对象时出现空字段

java - 分层所有权导致请求缓慢