我们有一个查询:
List<Book> books = session.createQuery(
"from Book b where :x member of b.bookCategories")
.setParameter("x", crimeStory)
.list();
但是在执行此查询时,我们收到了一条警告消息:
WARN 10:19:41弃用:HHH90000016:发现使用已弃用 &#39;收集财产&#39; HQL / JPQL查询中的语法[null.elements]; 使用集合函数语法代替[elements(null)]。
我尝试将查询更改为:
List<Book> books = session.createQuery(
"from Book b where ? in elements(b.bookCategories)")
.setParameter(0, crimeStory).list();
但警告信息仍在那里。
请帮我解决此警告。
P / s:我们目前正在使用Hibernate 5.0.2
答案 0 :(得分:10)
这是合法的JPA,因此不应弃用。另请参阅http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-oth-JSpec/。
请参阅https://hibernate.atlassian.net/browse/HHH-10621了解有关此错误的JIRA。
您可以通过向log4j.logger.org.hibernate.orm.deprecation=error
添加log4j.properties
来隐藏消息。
(我知道这是一个老问题,但它在JIRA调用中使用)
答案 1 :(得分:8)
而不是使用MEMBER OF
,而是使用INNER JOIN
。那么JSQL应该是
from Book b inner join b.bookCategories bc where bc.id = :categoryId
答案 2 :(得分:1)
作为旁注,要隐藏(不修复)此类消息,如 2017 和 Log4j2 ,请使用org.hibernate.orm.deprecation
,例如:< / p>
<Logger name="org.hibernate.orm.deprecation" additivity="false" level="WARN">
<RegexFilter regex=".*HHH90000016.*" onMatch="DENY" onMismatch="NEUTRAL"/>
…
</Logger>
请务必使用特定弃用邮件的特定代码,在此特定情况下为HHH90000016
,但对于Criteria-API弃用警告,它将为HHH90000022
,依此类推。
或者禁用所有 Hibernate弃用消息(不推荐):
<Logger name="org.hibernate.orm.deprecation" additivity="false" level="ERROR">
…
</Logger>