2016-11-18 21 views
2

我有實體AnnouncementEntity在我的代碼:TypedQuery無法與布爾繼續在塊

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; 
    } 
} 

我試圖讓它們具有「真實」在這一領域中的所有記錄:

TypedQuery<AnnouncementEntity> query = 
em.createQuery("select p from AnnouncementEntity p where p.on = TRUE",  AnnouncementEntity.class); 

但我面臨着異常:

SEVERE: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: p near line 1, column 60 [select p from com.ui4ivr.entity.AnnouncementEntity p where p.on = TRUE] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1679) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:313) at com.ui4ivr.dao.daoImpl.getAllAnnsVShort(daoImpl.java:933) at com.ui4ivr.view.MainView.enter(MainView.java:259)

能不能請你說w ^帽子是錯的?

+0

真正的原因是不正確映射到現場。 –

+0

該字段應該與數據庫中的實際列名稱相同。 我用「Boolean active」代替了爲「布爾開」; true 1,false 0

回答

1

取決於你如何定義你的ACTIVE列,你應該相應地映射你的屬性:

  • org.hibernate.type.BooleanType地圖的布爾到JDBC BIT類型
  • org.hibernate.type.NumericBooleanType地圖的布爾到JDBC INTEGER類型0 =否,1 =真
  • org.hibernate.type.YesNoType地圖一個布爾到JDBC CHAR類型 ( 'N' | 'N')= FALSE,( 'Y' | 'y')的=真
  • org.hibernate.type.TrueFalseType將布爾值映射到JDBC CHAR類型 as('F'| 'F')=假,( 'T' | 'T')=真

例如,如果你的ACTIVE列是CHAR(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); 
+0

您的評論幫助我找到了真正的原因。 Em查詢只能使用數字(1)。然而,它運作良好,沒有'地方'塊 –