【问题标题】:get SQL from hibernate get从休眠获取 SQL
【发布时间】:2013-05-06 05:58:56
【问题描述】:

有没有办法从session.get(class name, id) 调用中获取 SQL 查询?我之前看过这个帖子:How to get SQL from Hibernate Criteria API (*not* for logging),但它不包括 get 查询。

澄清:我正在寻找一种 API 方法来获取查询字符串,而不是从查询日志中获取。换句话说,我在问是否有一种方法(例如下面的toSql)而不是:

Foo foo = session.get(Foo.class, id);

我可以这样说:

String sqlOrHql = session.get(Foo.class, id).toSql();
// execute sqlOrHql to get foo, either through hibernate or manually using JDBC

【问题讨论】:

  • 请注意,它应该比从条件查询中获取 SQL 更复杂,原因如下: 1)如果您的实体与其他实体有关系,那么 get(clazz,id) 可以执行多个 SQL陈述。 2)如果你有延迟加载,那么有可能你拿到实体的时候并不是所有的语句都被执行。

标签: java sql hibernate


【解决方案1】:

persistence.xml

中启用休眠统计
<property name="hibernate.generate_statistics">true</property>

然后使用SessionFactory.getStatistics() 并访问必要的统计信息(可能是getQueries())。

有关详细信息,请参阅 Hibernate 统计文档 hereherethis post on SO

编辑

如果您想在不记录的情况下执行此操作,则必须使用 JDBC 驱动程序代理,例如 log4jdbcp6spyjdbc-trace-wrapper

【讨论】:

    【解决方案2】:

    您可以使用show_sql, format_sql, and use_sql_comments 在日志中获取实际的sql 语句。 Append the log to a fileparse the log 使用您选择的任何工具。现在,鲍勃是你的叔叔。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2017-11-26
      • 2019-07-16
      • 2012-10-24
      相关资源
      最近更新 更多