仅在 spring 引导项目中使用 @transactional 后调用保存后获取空 ID

Getting null id after calling save, only after using @transactional in spring boot project

`

@Service
@Transactional

Public class UserService

public void saveUser()
    User userEntity = new User();
    userEntity.setName("test");
    User userDataFromDB =            userRepository.save(userEntity);
    LOG.info("user Id= " +userDataFromDB.getId());

//entity code below
@Id 
@GeneratedValue(strategy = 
GenerationType.IDENTITY)

@Column(name="ID")
private int id;

@Column(name="NAME")
private string name;`

仅在使用事务注释后才能获取保存的用户 ID,否则在删除事务注释后获取 id。任何帮助将不胜感激。

修改如下:

public void saveUser()
    User userEntity = new User();
    userEntity.setName("test");
    userRepository.saveAndFlush(userEntity); //force immediate db write
    LOG.info("user Id= " + userEntity.getId());
}

通常,在您的 @Transactional 方法 return 之前,不会刷新数据库更新。通过使用 saveAndFlush(e)(委托给 EntityManager#flush - What does EntityManager.flush do and why do I need to use it?) 您可以强制立即更新数据库。

顺便说一句,对于新的持久化实体,save(e)saveAndFlush(e) 方法只调用 return e,因此无需分配 returned 结果到另一个变量。