【发布时间】:2012-06-05 06:10:41
【问题描述】:
我能够存储、检索和查询枚举类型的实体(使用 JPA/Hibernate)。枚举字段使用@Enumerated(EnumType.STRING) 进行注释。
是否可以做"SELECT a FROM MyEntity a WHERE a.myEnum LIKE :param"之类的事情?
想法是让它匹配枚举值字符串(在 DB 中)匹配“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)
【问题讨论】:
-
您确定要使用 like there 而不是 =?
-
是的,我是。这有点奇怪,但目的是提供枚举字符串值(存储在 db 中)的“部分值的简单搜索过滤器”。因此,如果用户键入“system”,它应该只返回以“system***”开头的枚举。
-
我已经更新了我的答案。我已经对此进行了测试,它完全符合您的要求。