2011-04-04 42 views
2

誰能告訴我,這是爲什麼不工作:JPA LIKE運算整數

criteria.add(cb.like((myentity.<Integer>get("integerid")).as(String.class), "2%")) 

我收到以下錯誤:

The object [2%], of class [class java.lang.String], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[integerid-->MYENTITY.INTEGERID]] with descriptor [RelationalDescriptor(org.example.model.MyEntity --> [DatabaseTable(MYENTITY)])], could not be converted to [class java.lang.Integer] 

是對myinteger屬性更改爲一個唯一的解決辦法字符串在模型中,以便我可以使用like運算符?

BR

回答

2

JPA不支持like()與整數,只有字符串。有些數據庫支持類似整數,而其他數據庫則不支持。

EclipseLink應該允許使用like()和Integer(只要你的數據庫支持它)。你使用什麼版本?可能需要使用> = 2.1。如果最新版本失敗,請記錄一個錯誤。

您也可以整數轉換爲使用「CHAR‘TO_CHAR’或‘根據您的數據庫。該標準API支持的功能()API來調用本機的功能轉換’功能的字符串。

請注意,爲()API不打算從整數轉換爲字符串,它是強制轉換爲子類實體。

+0

非常感謝。我正在測試德比數據庫。所以我會用我們的生產數據庫(postgres)來檢查它。 – reen 2011-04-05 05:31:57

1

我的猜測:你正試圖把在integerId一個字符串,它是一個整數。

而且,整數值之類的東西是不可能的。

將您的String.class更改爲Integer.class。和「2%」整數值

+0

我想用類似操作一個整數。對於查詢2%,我想要所有的值,如2,20,21,222等...這就是爲什麼我試圖將整數轉換爲字符串。 – reen 2011-04-04 07:20:32

+0

對不起沒看完你的代碼。 – Twister 2011-04-04 09:09:38

1

我都面臨着同樣的問題。我用JPA2.0和2.3的EclipseLink作爲實施。

codeClient實際上是一個Integer在我的數據庫。

註解@Convert只是將我的Integer列轉換爲一個String列。

這樣我就可以使用類似數字的謂詞。

@Entity 
@Table(name="COLIS_SO_VM") 
public class Colis implements Serializable { 

    ... 

    @Convert 
    private String codeClient; 

    ... 
} 

我知道這是一箇舊的帖子,但如果它可以幫助別人!

0

下面是它如何與JPA協同工作的例子,所以你可以在你的JPQL中使用帶有整數的LIKE。

public List<MyEntity> getMyEntities(String idStr) { 
    return entityManager.createQuery("SELECT m FROM MyEntity m WHERE CAST(m.id AS string) LIKE :idStr") 
     .setParameter("idStr", "%" + idStr+ "%").getResultList(); 
} 

Note: i tested it and worked fine with me, i am using JPA 2.1 with Hibernate provider.