我们有一个带有旧数据库的grails应用程序。当用户登录我们的应用程序并执行事务时,我们需要跟踪会话期间发生的sql。从代码的角度来看,是否有一种方法可以在调用.save()时将hql运行并将其转换为sql?我已经看到你可以在哪里打开它的日志记录,但我宁愿不尝试在运行时从日志文件中解析这些信息。
答案 0 :(得分:1)
方法1:您可以通过在log4j中设置以下属性来记录sql。
log4j.logger.org.hibernate.SQL=debug
方法2:
您还可以为SQL输出提供注释。 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:/ 我的HQL:来自供应商 /选择supplier0_.id作为id,supplier0_.name•作为name2_来自供应商供应商0 _
以下是解释如何将日志存储到数据库中的链接。 How to sanitize log messages in Log4j to save them in database