【发布时间】:2019-05-08 13:36:09
【问题描述】:
我有一个看起来像这样的实体:
@Audited
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
public static final long UNSAVED = 0;
@Id
@GeneratedValue
private long id;
@CreatedDate
@Column(name = "created_at", updatable = false)
private ZonedDateTime createdAt;
@CreatedBy
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "created_by")
private User createdBy;
@LastModifiedDate
private ZonedDateTime updatedAt;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "updated_by")
@LastModifiedBy
private User updatedBy;
}
我想要@LastModifiedBy 和@CreatedBy 以便他们设置相应的用户。但是,当我尝试保存实体时,出现异常:
java.lang.ClassCastException: Cannot cast java.lang.Long to com.intranet.users.Users
所以在我看来,它试图设置的不是实际用户,而是 id。有什么方法可以让 spring 在实体上设置实际用户而不仅仅是它的 id?
谢谢
【问题讨论】:
-
最好使用String而不是User
private String createdBy;进行审计
标签: java spring-boot spring-security spring-data-jpa spring-data