我能夠使用枚舉類型(使用JPA/Hibernate)存儲,檢索和查詢實體。枚舉字段用@Enumerated(EnumType.STRING)註釋。使用LIKE運算符對帶有枚舉的實體執行JPA查詢(EnumType.STRING)
是否可以做"SELECT a FROM MyEntity a WHERE a.myEnum LIKE :param"
這樣的事情?
這個想法是讓它匹配enum值字符串(在數據庫中)匹配模式(如「SYSTEM_%」或「BUSINESS_%」)的任何實體。
感謝您的幫助。
---更新:
當我試圖用這個查詢:
`@Query("SELECT e FROM MyEntity e WHERE e.myEnum LIKE :value")`
中的值(表示比賽什麼...):
%%
我得到這個例外:
Caused by: java.lang.IllegalArgumentException: Parameter value [%%] did not match expected type [mypackage.MyEntity$MyEnum]
at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:370)
at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:343)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:374)
at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:71)
你確定要使用像那裏,而不是=? – Jeshurun
是的,我是。這有點奇怪,但目的是提供枚舉的字符串值(存儲在db中)的「通過部分值的簡單搜索過濾器」。所以如果用戶輸入「system」,它應該只返回以「system ***」開頭的枚舉。 – kctang
我已經更新了我的答案。我已經測試過這個,它確實是你想要的。 – Jeshurun