【问题标题】:JPA NamedQuery with Object in WHERE clause that is converted using AttributeConverter使用 AttributeConverter 转换的 WHERE 子句中带有对象的 JPA NamedQuery
【发布时间】:2016-12-17 16:32:04
【问题描述】:

将 JPA NamedQuery 与 AttributeConverter 结合使用时遇到了一点问题。

所以基本上,我有一个 XYZ 类型的字段 xyz 的实体,它使用AttributeConverter<XYZ, String> 进行转换,因此该值作为 VARCHAR 存储在数据库中。这很好用。但我不太确定如何使用 NamedQuery 查询 Entity.xyz:

@NamedQuery(name="Entity.testQuery", query="SELECT e FROM Entity e WHERE e.xyz=:xyz

如果我以这种方式尝试,Hibernate 在启动时会崩溃。所以这不可能。有没有办法告诉 Hibernate 比较像WHERE e.xyz=:xyzAsString 这样的“未转换”(即字符串)值?

最好的问候 乔纳斯

编辑:我认为,Hibernate 崩溃是因为它尝试将 e.xyz 查询为与不存在的实体 XYZ 的 JOIN。所以也许,这是一个错误(我在 WildFly 9.2 上,它使用 Hibernate 4.3)

【问题讨论】:

  • 为什么会崩溃?显示您收到的异常和消息,因为不告诉您某些事情似乎很奇怪。查询包含一个参数,因此在执行查询时它应该只需要一个类型。

标签: hibernate jpa named-query


【解决方案1】:

参数必须是 XYZ 类型,而不是字符串。使用转换器方法获取所需String值对应的实例XYZ。

【讨论】:

  • Hibernate 在部署期间崩溃,甚至在我可以尝试使用给定参数执行查询之前。我认为,所有命名的查询都是在启动期间解析的
【解决方案2】:

在其他地方添加一些更改后,问题不再出现。所以我的结论是,它与作为参数的转换属性有关似乎是错误的。

还是谢谢

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2011-07-05
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多