javax.persistence.EntityNotFoundException在查询AuditEntity当数据库中存在记录

问题描述 投票:0回答:1

我目前使用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表中的记录的前端插入从后端这种记录不能及的。不知道如何该审核逻辑的作品。

java hibernate spring-boot exception hibernate-envers
1个回答
0
投票

我想通了,这的确是由于_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表必须还包含实体相应的条目。

© www.soinside.com 2019 - 2024. All rights reserved.