如何使用Hibernate执行low_priority或延迟插入MySQL表?
在我的日志记录例程中,我想将日志信息插入到数据库中的表中以供进一步分析。但我不关心插件完成需要多长时间,所以通常我会说INSERT LOW_PRIORITY INTO LogEntry(级别,标题,完整)VALUES('Info','Title here','Full log') ;如果我有一个实体LogEntry,如何编写或连接我的LogEntryDAO来执行LOW_PRIORITY或DELAYED插入和更新?
干杯
的Nik
答案 0 :(得分:3)
有一个更简单的解决方案。
使用@SQLInsert(sql="INSERT LOW_PRIORITY INTO LogEntry (level, title, full) VALUES (?, ?,?)")
美观而优雅: - )
答案 1 :(得分:2)
使用org.hibernate.Interceptor
。它将获得要执行以修改的SQL的副本。
答案 2 :(得分:1)
我想说更好的解决方案是让Log4J appender将该消息写入队列,MessageListener将其拾取并将其插入数据库。
您的应用程序通过这种方式与数据库分离,您无需关心需要多长时间。如果您的数据库出现故障,您的持久队列可能会累积消息,直到您能够重新启动它为止。
确保使用XA JDBC驱动程序和事务管理器,以便队列和数据库可以是一个单独的事务。