3

如何使用 Hibernate 将低优先级或延迟插入到 MySQL 表中?

在我的日志记录例程中,我想将日志信息插入到数据库中的表中以进行进一步分析。但我不在乎插入需要多长时间,所以通常我会说 INSERT LOW_PRIORITY INTO LogEntry (level, title, full) VALUES ('Info', 'Title here', 'Full log') ; 如果我有一个实体 LogEntry,我如何编写或连接我的 LogEntryDAO 以执行 LOW_PRIORITY 或 DELAYED 插入和更新?

干杯

尼克

4

3 回答 3

3

有一个更简单的解决方案。

用注释我的实体类@SQLInsert(sql="INSERT LOW_PRIORITY INTO LogEntry (level, title, full) VALUES (?, ?,?)")

漂亮优雅:-)

于 2009-11-16T13:16:30.207 回答
2

使用org.hibernate.Interceptor. 它将获取要执行修改的 SQL 副本。

有关详细信息,请参阅文档

于 2009-10-19T09:43:14.477 回答
1

我想说一个更好的解决方案是让 Log4J appender 将该消息写入队列,然后 MessageListener 将其拾取并将其插入数据库。

您的应用程序以这种方式与数据库分离,您不会关心它需要多长时间。如果您的数据库出现故障,您的持久队列可能会累积消息,直到您能够再次将其恢复。

确保使用 XA JDBC 驱动程序和事务管理器,以便队列和数据库可以是一个事务。

于 2009-10-19T09:43:07.787 回答