我需要在同一个表中插入用户所属的用户名和组名(均在 SecurityContext 中可用)。
class Entity
{
@createdBy
String username
@createdBy
String groupname
other fields ...
}
Run Code Online (Sandbox Code Playgroud)
根据要求。我无法通过创建用户类并通过外键引用它来解决这个问题。
使用 AuditingHandler 的当前实现,两个字段都获得相同的值。我如何确保它们获得各自的值。
这可以使用当前的实现来实现吗?如果不是,我如何提供 AuditingHandler 的自定义实现?
您可以创建一个单独的可嵌入类,并在父类中使用 @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
}
Run Code Online (Sandbox Code Playgroud)
其中 AuditorDetails 是:
@Embeddable
public class AuditorDetails {
private String username;
private String groupname;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
最后,您的 AuditorAware bean:
@Component
class AuditorAwareImpl implements AuditorAware<AuditorDetails> {
@Override
public AuditorDetails getCurrentAuditor() {
return new AuditorDetails()
.setUsername("someUser")
.setGroupname("someGroup");
}
}
Run Code Online (Sandbox Code Playgroud)
AuditingHandler 从您的 AuditorAware bean(它必须是实现它的单个 bean)中获取您的自定义 AuditorDetails,并将其设置在您的可审计实体中。
归档时间: |
|
查看次数: |
1353 次 |
最近记录: |