問題描述:
? ? 在表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ù)想效果了.
遂在此記錄一番!