【问题标题】:How to remove Hibernate deprecation warning message如何删除休眠弃用警告消息
【发布时间】:2016-01-25 02:32:36
【问题描述】:

我们有一个查询:

 List<Book> books = session.createQuery(
       "from Book b where :x member of b.bookCategories")
       .setParameter("x", crimeStory)
       .list();

但是在执行这个查询时,我们得到了一个警告信息:

WARN 10:19:41 deprecation: HHH90000016: Found use of deprecated 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

【问题讨论】:

    标签: java hibernate warnings deprecated


    【解决方案1】:

    它是合法的 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 调用中使用)

    【讨论】:

    • 仅供参考,我发现将 JPQL 更改为使用内部联接可以提高查询效率。
    【解决方案2】:

    不要使用MEMBER OF,而是使用INNER JOIN。 JSQL 应该是

    from Book b inner join b.bookCategories bc where bc.id = :categoryId

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

    【讨论】:

      【解决方案3】:

      附带说明,从 2017Log4j2 开始,要简单地隐藏(不修复)此类消息,请使用 org.hibernate.orm.deprecation,例如:

      <Logger name="org.hibernate.orm.deprecation" additivity="false" level="WARN">
          <RegexFilter regex=".*HHH90000016.*" onMatch="DENY" onMismatch="NEUTRAL"/>
          …
      </Logger>
      

      请务必为您的特定弃用消息使用特定代码,在本例中为 HHH90000016,但对于 Criteria-API 弃用警告,则为 HHH90000022,依此类推。

      或禁用所有休眠弃用消息(不推荐):

      <Logger name="org.hibernate.orm.deprecation" additivity="false" level="ERROR">
          …
      </Logger>
      

      【讨论】:

        猜你喜欢
        • 2021-01-16
        • 2020-07-20
        • 2015-06-28
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        • 2011-08-08
        相关资源
        最近更新 更多