【发布时间】:2011-01-28 22:16:12
【问题描述】:
你能在 Hibernate / EJB 3.0 中关闭某些查询的日志消息吗?
有没有办法为单个查询覆盖参数“hibernate.show_sql”?
【问题讨论】:
标签: java hibernate log4j ejb-3.0
你能在 Hibernate / EJB 3.0 中关闭某些查询的日志消息吗?
有没有办法为单个查询覆盖参数“hibernate.show_sql”?
【问题讨论】:
标签: java hibernate log4j ejb-3.0
从休眠配置来看,我认为这是不可能的。
Hibernate 为您提供了两种记录查询的方法:将 hibernate 参数 hibernate.show_sql 设置为 true 或将日志类别 org.hibernate.SQL 设置为 DEBUG。两种方式都是独立的,如果您同时使用这两种方式,您的查询将被记录两次。
我更喜欢使用第二种方式:它更加灵活,因为您可以在运行时通过 jmx-console 更改它(如果您使用 jboss,这是开箱即用的)。
而且,hibernate 正在使用 apache commons logging(使用 hibernate.show_sql,hibernate 只是将请求写入 System.out)。
我认为可以为给定类别提供 Logger 的自定义实现(我不知道这有多容易或多难,我从来没有做过)。然后,您只需要提供在 Logger 实现中决定是否记录请求的逻辑。
【讨论】:
如果它只是一个查询,即您不需要会话中的结果来进行其他更新,您可以为该查询创建一个单独的 SessionFactory。
【讨论】: