自动填充实体属性

时间:2009-11-12 14:37:56

标签: java database-design

我有一些类型的架构师(?)问题

我开发了一个基于Spring和Hibernate的应用程序(带注释的配置) 对于我的数据库中的每个表,我添加了4个字段:createdBy和modifiedBy(String),创建和修改(Datetime)。每个实体类也分别具有此字段和getter / setter对。因此,我希望找到填写此字段的最佳实践解决方案,而不是为每个DAO额外代码添加。有可能吗?

我会对任何提案感到高兴

3 个答案:

答案 0 :(得分:3)

当然可以。只需将此代码添加到所有持久实例的基类中,并启用注释处理:

@PrePersist
public void prePersist()
{
    if (created == null)
    {
        created = updated = createCurrentTimestamp();
        createdBy = updatedBy = CurrentUser.get();
    }
}

@PreUpdate
public void preUpdate()
{
    updated = createCurrentTimestamp();
    updatedBy = CurrentUser.get();
}

public static java.sql.Timestamp createCurrentTimestamp ()
{
    final long now = System.currentTimeMillis();
    final java.sql.Timestamp ts = new java.sql.Timestamp (now);
    ts.setNanos(((int)(now % 1000)) * 1000000);
    return ts;
}

CurrentUserThreadLocal<String>,它允许我在操作开始时指定用户启动它。这样,任何被触摸的对象都将包含正确的信息。

如果没有注释处理,请激活HBM文件中的相应选项。

答案 1 :(得分:0)

看看Spring AOP。 您可以为DAO方法分配“拦截器”,以便首先由拦截器处理对象,然后执行进入DAO方法。
在拦截器中,您可以使用所需的数据填充对象。

答案 2 :(得分:0)

一种可能性是定义一个Hibernate EventListener,它可以在每个实体刷新到数据库之前填写这些字段