2011-06-06 70 views
8

在我的項目我使用JPA 2.0的EclipseLink inplementation,一個我有以下問題:如何編寫與布爾條件JPA查詢

我與布爾列定義的實體:

@Entity 
public User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="USR_ID") 
    private Short id; 

    @Column(name="USR_NAME") 
    private String name; 

    @Column(name="USR_ACTIVE") 
    private boolean active; 

    ....... 

} 

我想創建將返回所有活動用戶的查詢,如下所示:

從用戶u中選擇u其中u.active = TRUE;

但是,如果我使用該查詢,我得到異常,布爾值不能轉換爲短(數據庫中的列存儲爲smallint)。有沒有正確的方法來編寫這個查詢?

謝謝

+0

什麼JPA的供應商?您使用的是哪種數據庫供應商(MySQL,SQL Server,Oracle)?您使用的是什麼JDBC驅動程序? – 2011-06-08 19:56:06

+0

我使用Eclipselink作爲JPA提供程序,Derby作爲數據庫和Derby客戶端jdbc驅動程序,但也使用Spring創建EntityManager,事務管理...而且還有一個問題,我忘記指定JPA供應商。在添加 查詢TRUE條件工作。 – 2011-06-09 10:29:48

+0

在這裏和Derby/Hibernate一樣。但它適用於MySQL。 :-) – 2012-04-03 13:02:19

回答

0

我使用EclipseLink作爲JPA提供程序和MySQL數據庫。使用此配置,將1用於true,將0用於虛假作品。

0

您可以使用@TypeConverter(的dataType = Integer.class)

-3

TRUE是一個特殊的關鍵字。 嘗試

從用戶u中選擇u其中u.active IS TRUE;

+3

「u.active IS TRUE」也不適用於我,但是「u.active = TRUE」。使用EclipseLink 2.5 – ctron 2015-03-05 12:02:04

1

我也有這個問題(PostgreSQL + Eclipselink),並得到它與@TypeConverter@Convert註釋工作。

@Entity 
@TypeConverter(name = "booleanToInteger", dataType = Integer.class) 
public User { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="USR_ID") 
    private Short id; 

    @Column(name="USR_NAME") 
    private String name; 

    @Column(name="USR_ACTIVE") 
    @Convert("booleanToInteger") 
    private boolean active; 

    ....... 
} 
8

使用以下格式:

+1

的答案是「SELECT e FROM Employee e WHERE e.active = TRUE」,您可以忽略該鏈接。所以它不是「只有鏈接的答案」!此外,鏈接可能無效,所以任何答案!因此,鏈接是任何有興趣閱讀更多內容的人的參考。最後但並非最不重要的一點,這個鏈接是一個維基鏈接,所以它不過是一個答案,而是一種獲得你想知道的東西的方法! – 2015-12-08 03:02:22

+0

哇,如果答案是錯誤的,你可以添加你的評論。然後認識到鏈接已經過時將是有用的。不知道降價是什麼意思。 – 2015-12-09 05:16:28

0

你可以編寫查詢:

SELECT e FROM Employee e WHERE e.active = TRUE

更多信息,請參見the docs

@Query(「從用戶選擇U U order by u.active「);

它將首先顯示非活動用戶。如果你想看到積極的用戶第一次使用,如:

@Query(「選擇u從用戶u訂單由u.active desc」);

0
SELECT e FROM Employee e WHERE e.active = TRUE 

在上面的查詢中,如何將TRUE/FALSE作爲用戶參數傳遞? 當我在下面嘗試時,它不會根據用戶輸入返回值(TRUE/FALSE)。

這裏是命名查詢

 SELECT e FROM Employee e WHERE e.active = :inputValue 

這裏我所說的上述名稱查詢您使用的(即休眠,的EclipseLink,OpenJPA的,等等)

Query getEmployeesByState= entityManager.createNamedQuery("above query name"); 
    getEmployeesByState.setParameter("active", Boolean.FALSE); 
+0

對不起,這是一個問題。但我不能添加評論,所以發佈的問題作爲回答 – user2555212 2017-10-24 06:35:06

+0

然後,你應該張貼問題作爲一個問題。我認爲你應該刪除這篇文章和[創建一個新問題](https://stackoverflow.com/questions/ask)。您剛剛發佈的帖子不會顯示在首頁,因此很少有人會看到它。如果你創建一個新的問題,你會得到更多的答案。請務必閱讀[如何提出問題](https://stackoverflow.com/help/how-to-ask) – Wndrr 2017-10-24 06:55:27