我能够使用枚举类型(使用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)
型
5条答案
按热度按时间1aaf6o9v1#
当然可以。只要使用
query.setString("param", "BUSINESS_%");
。注意,使用setParameter()
而不是setString()
会抛出ClassCastException,因为Hibernate试图将其转换为枚举,但是setString()
确实可以做到这一点。ruarlubt2#
我遇到了同样的问题,我做了以下事情:
字符串
现在你可以使用“like”对statusString进行查询:
型
cld4siwp3#
saidly在org.springframework.orm.hibernate3.HibernateTemplate中有一个快捷方式:
字符串
如果有一个额外的else if(value instanceoff String),则会更好.
9udxz4iz4#
作为一种解决方法,您可以通过将模式连接到查询来构建查询。
字符串
它可以与Hibernate和Eclipse Link一起使用。
但是,不要尝试使用从用户输入生成的
pattern
,因为以这种方式构造查询容易受到sql注入攻击。jjjwad0x5#
上面的答案都不适合我,尽管我设法找到了适合我的解决方案,而且它非常简单-你只需将Enum转换为String:
字符串
其中“?1”是参数