我目前使用Spring引导2.1.1.RELEASE,休眠Envers 5.3.7.Final。
当我查询我的AuditEntity我的User类,它会抛出javax.persistence.EntityNotFoundException说我的用户记录不存在。然而,在数据库中它确实存在。任何人有任何想法,为什么?
用户实体
@Entity
@EntityListeners(AuditingEntityListener.class)
@Audited
@Table(name = "[user]")
@Getter
@Setter
@NoArgsConstructor
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false, unique = true)
@Length(max = 20)
@Unique
private String username;
@Column(nullable = false)
private String password;
@Column
private String email;
@Column(nullable = false)
private String name;
@Audited(targetAuditMode = NOT_AUDITED)
@ManyToOne(fetch = FetchType.LAZY)
@CreatedBy
private User createByUser;
@CreatedDate
private LocalDateTime createDatetime;
@Audited(targetAuditMode = NOT_AUDITED)
@ManyToOne(fetch = FetchType.LAZY)
@LastModifiedBy
private User updateByUser;
@LastModifiedDate
private LocalDateTime updateDatetime;
@Column
private Boolean active = true;
@Column
private Boolean deleted = false;
}
虽然查询审计实体,属性createByUser updateByUser抛出异常javax.persistence.EntityNotFoundException:无法找到data.entity.User ID为2。然而,在数据库中我有这样的记录。
AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQuery query = auditReader.createQuery().forRevisionsOfEntity(User.class, true, true);
query.add(AuditEntity.id().eq(id));
return query.getResultList();
修改是在2018年12月5日
这个问题似乎是与此ID 2记录的问题,我通过这将产生_aud表中的记录的前端插入从后端这种记录不能及的。不知道如何该审核逻辑的作品。
我想通了,这的确是由于_aud表中缺少记录。
取而代之的将测试记录直接到后端。我决定在应用程序类的春天启动的创建例程。
@SpringBootApplication(
exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
@EntityScan(basePackageClasses = {WebApplication.class})
@EnableAsync
@EnableCaching
@EnableTransactionManagement
@EnableConfigurationProperties
public class WebApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
@Bean
public CommandLineRunner setUpInitialData(
EntityRepository1 entityRepository1,
EntityRepository2 entityRepository2) {
return args -> {
// do all data insertion here...
};
}
}
非此即彼的_aud表必须还包含实体相应的条目。