我有一个问题,Spring数据没有保存实体。应用程序逻辑如下:
@Scheduled(fixedDelay = 10_000)
public void scheduled() {
Pageable pageable = PageRequest.of(0, pageSize);
List<EntityClass> entities = entityService.getAllByStatusOrderByIdDesc(NEW_STATUS, pageable);
while (!entities.isEmpty()) {
entities.forEach(entity -> {
entity.setStatus(PROCESSING_STATUS);
process(entity);
});
entityService.saveAll(entities);
loggers = entityService.getAllByStatusOrderByIdDesc(NEW_STATUS, pageable);
}
private void process(Entity entity) {
threadPool.execute(
() -> processor.execute(
TaskBuilder.entity(entity).build()
)
);
}
...
log.info("[SaveStep] [execute] status before {}", entity.getStatus());
Entity entity = entityService.save(entity);
log.info("[SaveStep] [execute] status after {}", entity.getStatus());
这两种日志方法都显示正确的状态(“OK”或“ERROR”),但数据库行始终包含“PROCESSING”状态。我试着重做一个实体服务。save()有多种变体(entityRepository是一种常规的JPARepository):
public Entity save(Entity entity) {
return repository.save(logger);
}
@Transactional
public Entity save(Entity entity) {
Entity saved = repository.getFirstById(entity.getId());
saved.setStatus(entity.getStatus());
return repository.save(saved);
}
@Transactional
public Entity save(Entity entity) {
Entity saved = repository.getFirstById(entity.getId());
log.info("[Service] [save] status before {}", saved.getStatus());
saved.setStatus(entity.getStatus());
log.info("[Service] [save] status after {}", saved.getStatus());
return repository.save(saved);
}
@Modifying
@Transactional
@Query(value = "UPDATE entity_table_name set status = :status where id = :id", nativeQuery = true)
void updateStatus(@Param("id") Long id, @Param("status") String status);
目前我没有办法尝试。主要的侮辱是,大多数实体最终被数据库正确地消化,只有大约20%被save()忽略,没有抛出任何异常。
谢谢泰勒,他绝对正确地指出了我的问题。即使在调度器点击saveAll(“处理”)行之前,实体列表已经被并行处理,并以足够快的速度以正确的状态保存,这会导致状态重写。
您将消息提交到池后设置为“处理”,这意味着池可能会先访问它,而“处理”更新可能会在之后发生。不确定这是否是您的问题,但您正在做的事情有可能。在提交到池之前尝试设置并保存/提交“处理”更新。
我有一个使用JPA的Spring Boot应用程序,它有两个数据源,一个用于DB2,一个用于SQL Server。 当我尝试将实体保存到SQL Server时,不会抛出任何错误,但该实体不会持久化到数据库。我看不到日志中正在生成插入。 提前感谢 下面是我尝试保存实体所执行的代码@组成部分 下面是sql Server配置。 这是SQL Server存储库 公共接口BeercupMessageLogR
我在使用JPA时遇到了一些困难。我没有得到任何异常,但我不能保存任何东西到数据库。我从Hibernate到Jpa,在那里一切都工作得很好。下面是我的文件 Application.Properties: 存储库: 服务: 我在提交表单时得到了200的响应,但在数据库中找不到数据
我有跟风问题 我有一个Spring数据Rest的基本配置(没有花哨,没有自定义)。 使用spring数据rest webmvc 2.0.0版本和spring数据jpa 1.5.0版本 A类 B类 存储库A 存储库B 当我拯救一个实体时工作正常,但我不知道如何拯救一段关系 e、 g.使用http将“A”保存在“B”中 这是我从这个答案中尝试的最后一件事https://stackoverflow.co
java 持久实体
我是Hibernate的新手,并要求使用具有这些列的表的数据库 表:TBL _ product//库存项目列表< br >列:< br > key _ product < br > key _ category < br > fld _ product _ name < br > fld _ Inventory _ qty < br > fld _ unit _ price < br > fld
我有一个Spring应用程序,其中Domain Object标识符不是由数据库分配的,而是由应用程序生成的。标识符是在BeforeSave回调期间生成并添加到Domain Object中的。保存域对象(插入)后,当尝试保存具有相同标识符的域对象(更新)时,我收到以下错误 原因:组织。springframework。道。Incorrectupdatesemanticdataaccessexcepti