我需要在同一个表中插入用户所属的用户名和组名(在SecurityContext中都可用)。
class Entity
{
@createdBy
String username
@createdBy
String groupname
other fields ...
}根据要求。我不能通过创建一个用户类并通过一个外键引用它来解决这个问题。
对于当前AuditingHandler的实现,两个字段都得到了相同的值。我如何确保他们得到各自的价值。
能否使用当前的实现来实现这一点?如果没有,我如何提供AuditingHandler的自定义实现?
发布于 2016-08-08 14:19:20
您可以创建一个单独的可嵌入类,并在父类中使用@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 (它必须是实现它的单个bean )中获取您的自定义AuditorDetails并在您的可审计实体中设置它。
https://stackoverflow.com/questions/35535899
复制相似问题