我正在尝试将自定义值加载到我的@CreatedBy
实体的AuditFields
字段中。每当我发出POST
请求时,我都希望Spring Data Rest使用此AuditorAwareImpl
并将TestPrincipal
字符串传递到@CreatedBy
字段。
我实际上得到的结果是409 Conflict, SQL Constraint created_by is null
。
BaseEntity
需要使用@MappedSuperclass
,但我认为它需要@Entity
的功能才能将值传递给@CreatedBy
?
这里的任何指针将不胜感激。
AuditEntity
@Embeddable
@Access(AccessType.FIELD)
@Data
@EntityListeners(AuditingEntityListener.class)
public class AuditFields implements Serializable {
@CreatedBy
@Column(name="CREATED_BY", length=256)
private String createdBy;
@Column(name="CREATED_TIMESTAMP")
private LocalDateTime createTimestamp = LocalDateTime.now();
...
...
}
BaseEntity
@MappedSuperclass
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaseEntity implements Serializable {
@Column(name="RECORD_STATUS_CODE", length=1)
@EqualsAndHashCode.Exclude
private String myStatus;
@Version
@Column(name="VERSION_NUMBER")
@Setter(AccessLevel.PROTECTED)
@EqualsAndHashCode.Exclude
private Long versionNumber;
@Embedded
@EqualsAndHashCode.Exclude
private AuditEntity auditFields;
}
AuditorAwareImpl
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class AuditorAwareImpl {
@Bean
public AuditorAware<String> auditorProvider() {
return new AuditorAware<String>() {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of("TestPrincipal");
}
};
}
}
答案 0 :(得分:0)
这里的窍门是,print (consec_group)
2019-07-01 20
2019-07-02 24
2019-07-03 24
2019-07-04 24
2019-07-05 24
2019-07-06 8
2019-07-07 21
2019-07-08 0
2019-07-09 24
Freq: D, dtype: int64
在@CreatedBy
实体中如果没有一些额外的工作就无法工作。
我拼凑了一些不同的教程,结果是我将@Embedded
放在了@EntityListener
中,并编写了一个使用MyEntity
的自定义侦听器类。然后,您可以通过添加嵌入@PrePost
等的BaseEntity
来进一步构建它。
AuditEntity
AuditEntity
MyEntity
@Embeddable
@Data
public class AuditEntity {
@Column(name="CREATED_BY")
@CreatedBy
private String createdBy;
// additional fields ...
}
CustomAuditListener
@Data
@Table(name="TABLENAME", schema="SCHEMANAME")
@EntityListeners(CustomAuditListener.class)
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="MY_ID")
private Long myId;
@Embedded
@EqualsAndHashCode.Exclude
private AuditEntity auditFields;
}