gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:18 28 4
gpt4 key购买 nike

我目前使用的是 Spring Boot 2.1.1.RELEASE、Hibernate Envers 5.3.7.Final。

当我查询 User 类的 AuditEntity 时,它将抛出 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: Unable to find data.entity.User with 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表中缺少记录造成的。

而不是直接将测试记录插入到后端。我决定在 Spring Boot 的 Application 类中创建一个例程。

@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 表还必须包含实体的相应条目。

关于当数据库中存在记录时查询 AuditEntity 时出现 javax.persistence.EntityNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53604901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com