仅在 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 结果到另一个变量。
`
@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 结果到另一个变量。