有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,但也没有成功

我知道这对任何冬眠大师来说都是愚蠢的,如果有人能想出一个能节省我很多时间的答案的话

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    问题出在CatalogBase类中的@Id注释中。如果您进行了更改,它将正常工作:

    @MappedSuperclass
    public class CatalogBase {
    
        public UUID getId() {
            return id;
        }
    
        public void setId(UUID id) {
            this.id = id;
        }
    
        @Id
        @Type(type = "pg-uuid")
        protected UUID id;
    }
    

    在Hibernate中可以有两种访问类型。属性访问(和您一样)或字段访问。Hibernate将从@Id@EmbeddedId的位置猜测访问类型

    正如我所知(我不是Hibernate大师),这两种访问类型之间应该没有区别。但有些框架需要具有现场访问权限。无论如何,我不知道为什么您的实现不能用于查询,也没有找到任何其他解释