JPA native 查詢時(shí)枚舉類型值轉(zhuǎn)換 的解決辦法

問題描述:

? ? 在表A中,有一 varchar 類型的字段 f,這個(gè)字段對(duì)應(yīng)于java實(shí)體中的屬性類型是一個(gè)枚舉E.現(xiàn)需要在表A中查出所有字段f包含了枚舉E的某個(gè)值的記錄.(字段f存的是多個(gè)用逗號(hào)隔開的枚舉E的值,如:"0,0,1,0")

以下是枚舉E的定義

public enum E {

Q(0),

W(1);

Integer value;

public E(Integer val){this.value = val}

}


以下是japRepositor:

public interface ERep extends JpaRepository<A,Integer> {


@Query(nativeQuery = true,value="SELECT * FROM A AS a WHERE a.f LIKE %:e%" )

List<A> findByE(@param("e") E e);

}


測試時(shí)給findByE方法賦值為E.Q,結(jié)果發(fā)現(xiàn)jap生成的sql語句是: SELECT * FROM A AS a WHERE a.f LIKE %Q%;

這顯然不是我所期望的,我期望的結(jié)果應(yīng)該是:

SELECT * FROM A AS a WHERE a.f LIKE %0%;


在google上搜索解決辦法無果后,突然想到為啥會(huì)翻譯成枚舉值的字面值呢?我猜測,一定是spring 調(diào)用了E 的toString()方法,想到這里立馬將枚舉類E改為:

public enum E {

Q(0),

W(1);

Integer value;

public E(Integer val){this.value = val}

@Override

public String toString(){

????????return this.value.toString();

}

}

再一測試果然就實(shí)現(xiàn)預(yù)想效果了.

遂在此記錄一番!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,142評(píng)論 0 2
  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的!! 因?yàn)镾cala是基于Java虛擬機(jī),也就是...
    燈火gg閱讀 3,607評(píng)論 1 24
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評(píng)論 18 399
  • 7月11日 回家度過了短暫的4天假期,暑期的實(shí)習(xí)終于到來了,心里還是挺緊張的,對(duì)實(shí)習(xí)地點(diǎn)充滿了無限的想象…… 7點(diǎn)...
    原生態(tài)孩子閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容