将用户名添加到审计表

时间:2016-01-13 12:47:52

标签: java mysql database hibernate

我有一个用户必须登录的Web应用程序。我正在使用Hibernate将对象保存到MySQL数据库。在数据库中,我有触发器,当对对象进行插入/更新/删除时,将新记录插入到审计表中

DELIMITER $$
CREATE TRIGGER `trg_insert_Book` BEFORE INSERT ON Book FOR EACH ROW
    BEGIN   
         INSERT INTO audit_book (AUDITTYPE,AUDITDATE,bookId, bookName, pages) VALUES ('I',NOW(), NEW.bookId, NEW.bookName, NEW.pages);
    END; $$
DELIMITER ;

正如您从上面的触发器中看到的那样,当audit_book表上插入完成时,我会在Book表中插入一条新记录。插入使用以下代码完成

public void addNewBook(Book book) {
    Session session = sessionFactory.getCurrentSession();
    session.save(book); 
}

我有一个方法可以返回当前正在使用系统的用户

@ModelAttribute("username")
    public String getPerson(Principal principal) {
    return principal.getName();
}

我的问题是如何将此用户名传递给数据库,以便将用户名添加到审计表而不将用户名添加到Book对象?

1 个答案:

答案 0 :(得分:2)

不,你不能这样做,因为数据库不知道识别应用程序用户的逻辑。

您可以考虑使用Hibernate Envers而不是数据库触发器来进行审核。在链接的示例中,您可以在 4部分中了解如何实现目标。将用户名信息添加到每个修订版