如何删除Hibernate弃用警告消息

时间:2015-10-26 03:48:50

标签: java hibernate warnings deprecated

我们有一个查询:

 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

3 个答案:

答案 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

参考:https://stackoverflow.com/a/8340001/67796

答案 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>