【问题标题】:How can I get the hql query from a grails transaction?如何从 grails 事务中获取 hql 查询?
【发布时间】:2013-08-27 18:53:48
【问题描述】:

我们有一个带有旧数据库的 grails 应用程序。当用户登录我们的应用程序并执行事务时,我们需要跟踪会话期间发生的 sql。从代码的角度来看,有没有办法在调用 .save() 并将其转换为 sql 时运行 hql?我已经看到你可以在哪里打开它的日志记录,但我不想在运行时尝试从日志文件中解析这些信息。

【问题讨论】:

  • 也许你想要save log in the database之类的东西?
  • 如果您的更新全部通过 Grails 应用程序,您可以使用Audit Plugin。这不会给你 sql 但它会跟踪每个插入/更新/删除
  • @Alidad 感谢您提供的信息,这是否将其放在日志文件中?还是我可以在运行时抓住它并用它做我想做的事?
  • @southpaul 它将存储在一个表格中,您可以随时访问它,如果我没记错,它还会给您一个基本报告。

标签: hibernate grails hql grails-orm


【解决方案1】:

方法一:你可以通过在log4j中设置以下属性来记录sql。

log4j.logger.org.hibernate.SQL=debug 

方法二:

您还可以为 SQL 输出提供 cmets。 Query 接口有一个 setComment() 方法,它接受一个 String 对象作为参数:

public Query setComment(String comment)

如果启用了 SQL 日志记录,则使用它来识别应用程序日志中的 SQL 输出。 比如

String hql = "from Supplier";
Query query = session.createQuery(hql);
query.setComment("My HQL: " + hql);
List results = query.list();

您的日志中的输出将在 SQL 之前以 Java 风格的注释形式出现注释:

Hibernate: /My HQL: from Supplier/ select supplier0_.id as id, supplier0_.name ➥ as name2_ from Supplier supplier0_

这里是解释如何将日志存储到数据库的链接。 How to sanitize log messages in Log4j to save them in database

【讨论】:

  • 有没有办法拥有同样的功能,但又不让它进入日志文件?我需要在不解析日志文件的情况下访问此运行时。
  • 为了更进一步,在 log4j 中扩展一个 appender 并将其推送到 DB 或 jms 队列或任何其他...
  • 根据 DAJ 的建议,这里是解释如何将日志存储到数据库中的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多