在Hibernate中插入LOW_PRIORITY或INSERT DELAYED

时间:2009-10-19 09:36:45

标签: java mysql hibernate delay

如何使用Hibernate执行low_priority或延迟插入MySQL表?

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

干杯

的Nik

3 个答案:

答案 0 :(得分:3)

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

使用@SQLInsert(sql="INSERT LOW_PRIORITY INTO LogEntry (level, title, full) VALUES (?, ?,?)")

注释我的实体类

美观而优雅: - )

答案 1 :(得分:2)

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

See the docs for details

答案 2 :(得分:1)

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

您的应用程序通过这种方式与数据库分离,您无需关心需要多长时间。如果您的数据库出现故障,您的持久队列可能会累积消息,直到您能够重新启动它为止。

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