当前位置: 首页 > 知识库问答 >
问题:

对带有枚举(EnumType.String)的实体使用LIKE运算符执行JPA查询

颜嘉誉
2023-03-14

我能够存储、检索和查询具有枚举类型的实体(使用JPA/Hibernate)。枚举字段使用@Enumerated(EnumType.String)进行注释。

是否可以执行类似“Select a FROM MyEntity a WHERE.myEnum like:param”的操作?

谢谢你帮忙。

---更新:

当我试图用这个来查询时:

`@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)

共有1个答案

澹台华晖
2023-03-14

当然可以。只需使用query.setstring(“param”,“business_%”);。请注意,使用setParameter()而不是setString()会引发ClassCastException,因为Hibernate试图将其强制转换为枚举,但是setString()完全符合您的要求。

 类似资料:
  • 枚举定义- 存储库- 服务电话- 例外情况- 为什么它会抛出此异常?我已经定义了@Enumerated(EnumType.STRING),所以它应该期望存储在db中的字符串类型。

  • 问题内容: 设置以下映射 通知ID是一个整数。现在我需要使用like运算符进行此HQL查询 ATT:它 就像 运算符NOT = (等于运算符) 然后我用 但是不起作用,因为Hibernate抱怨在调用User.id的getter时发生了IllegalArgumentException 即使我使用 这没用 我应该使用什么来传递查询? 问题答案: 根据Hibernate参考: str()用于将数字或时

  • 问题内容: 有人可以告诉我,这为什么不起作用: 我收到以下错误: 为了可以使用运算符,将模型的属性更改为字符串的唯一解决方案是吗? BR 问题答案: JPA不支持Integers的like(),仅支持字符串。一些数据库确实支持整数,而其他则不支持。 EclipseLink应该允许将like()与Integer一起使用(前提是您的数据库支持它)。您使用什么版本?可能需要使用> = 2.1。如果无法在

  • 问题内容: 我问这个问题有点傻,但是我找不到这个问题的简单答案。 以这个简单的实体为例: 它代表一个人,因此我想添加一个“ 性别 ”属性。 这将是“男性”或“女性”。所以呢? 我可以使用String,并要记住,“ m”代表男性,“ f”代表女性。 或者,我可以使用布尔值“ isMale”(是或否)。 但是,我认为无论哪种情况,Hibernate纯粹主义者都不会高兴:) 仔细搜索一下,我发现最佳实践

  • 我们正试图找到一种使用JPA来持久化枚举的可靠方法。使用的常见方法是不可取的,因为在重构时破坏映射太容易了。每个枚举都应该有一个单独的数据库值,它可以不同于枚举名称/顺序,这样您就可以安全地更改枚举的名称或内部顺序(例如序数值),而不会破坏任何东西。例如,这篇博客文章有一个如何实现这一目标的示例,但是我们觉得建议的解决方案给代码增加了太多的混乱。我们希望通过使用JPA 2.1中引入的新的机制来实现

  • 问题内容: 在我的Hibernate JPA示例代码中。 给整个字符串时它工作正常 但是,当我们赋予ie 或 其实我的想法是我给运算符,使它可以工作给定字符串的任何字符。 问题答案: 您正在使用 代替 第一个将返回 等的行。