我需要在同一个表中插入用户所属的用户名和组名(在SecurityContext中都可用)。
class Entity
{
@createdBy
String username
@createdBy
String groupname
other fields ...
}
根据要求。我无法通过创建用户类并通过外键引用它来解决此问题。
使用AuditingHandler的当前实现,两个字段都获得相同的值。我如何确保他们获得各自的价值。
可以使用当前实现来实现吗? 如果不是,我怎样才能提供AuditingHandler的自定义实现?
答案 0 :(得分:3)
您可以创建一个单独的可嵌入类,并在父类中使用@CreatedBy进行注释。一种方法是定义一个实现AuditorAware的bean,然后你可以让它返回自定义对象,包含你需要的两个字段。例如,您的父类看起来像这样(注意监听器注释):
@Entity
@EntityListeners(AuditingEntityListener.class)
public class AuditedEntity {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
private String id;
@Embedded
@CreatedBy
private AuditorDetails createdBy;
// setters and getters
}
AuditorDetails是:
@Embeddable
public class AuditorDetails {
private String username;
private String groupname;
// setters and getters
}
最后,你的AuditorAware bean:
@Component
class AuditorAwareImpl implements AuditorAware<AuditorDetails> {
@Override
public AuditorDetails getCurrentAuditor() {
return new AuditorDetails()
.setUsername("someUser")
.setGroupname("someGroup");
}
}
AuditingHandler从AuditorAware bean中获取自定义AuditorDetails(它必须是实现它的单个bean)并将其设置在可审计实体中。