Java TypedQuery无法在where块中继续使用布尔值

Java TypedQuery无法在where块中继续使用布尔值,java,boolean,hql,Java,Boolean,Hql,我的代码中有entity AnnouncementEntity: public class AnnouncementEntity { //columns private long id; *** private Boolean on; *** @Column(name="ACTIVE") public Boolean getOn() { return on; } public void setOn

我的代码中有entity AnnouncementEntity:

public class AnnouncementEntity {

    //columns
    private long id;    
    ***
    private Boolean on;
    ***
    @Column(name="ACTIVE")
    public Boolean getOn() {
        return on;
    }

    public void setOn(Boolean on) {
        this.on = on;
    }
}
我正在尝试获取此字段中所有具有“true”的记录:

TypedQuery<AnnouncementEntity> query = 
em.createQuery("select p from AnnouncementEntity p where p.on = TRUE",       AnnouncementEntity.class);
TypedQuery查询=
em.createQuery(“从AnnouncementEntity p中选择p,其中p.on=TRUE”,AnnouncementEntity.class);
但我面临一个例外:

严重:
java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:第1行第60列附近的p[从com.ui4ivr.entity.AnnouncementEntity p中选择p,其中p.on=TRUE]
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
位于org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:313)
位于com.ui4ivr.dao.daoImpl.getAllAnnsVShort(daoImpl.java:933)
在com.ui4ivr.view.MainView.enter(MainView.java:259)


您能告诉我怎么回事吗?

根据您如何定义
活动列,您应该相应地映射您的属性:

  • org.hibernate.type.BooleanType
    将布尔值映射到JDBC位类型
  • org.hibernate.type.NumericBooleanType
    将布尔值映射到JDBC 整数类型为0=false,1=true
  • org.hibernate.type.YesNoType
    将布尔值映射为JDBC字符类型,如下所示: ('N'|'N')=假,('Y'|'Y')=真
  • org.hibernate.type.TrueFalseType
    将布尔值映射到JDBC字符类型 as('F'|'F')=false,('T'|'T')=true
例如,如果您的
ACTIVE
列是一个字符(1)并存储“Y”或“N”值,则应将实体中的相关方法定义为:

//columns
private long id;    

@Type(type="yes_no")
@Column(name="ACTIVE")
private Boolean on;

public Boolean getOn() {
    return on;
}

public void setOn(Boolean on) {
    this.on = on;
}
另外,更改您的查询:

TypedQuery<AnnouncementEntity> query = 
em.createQuery("select p from AnnouncementEntity p where p.on is TRUE", AnnouncementEntity.class);
TypedQuery查询=
em.createQuery(“从AnnouncementEntity p中选择p,其中p.on为TRUE”,AnnouncementEntity.class);

你的评论帮助我找到了真正的原因。Em查询只能使用数字(1)。但是,它在没有“where”块的情况下运行良好。真正的原因是到字段的映射不正确。该字段应与数据库中的实际列同名。我已将“布尔活动”替换为“布尔开启”;真1,假0