我有以下两种方法,可以使用Spring数据JPA的MongoRepository在mongodb中存储单个用户和多个用户。如果该方法中发生任何异常,则不会回滚。我可以在数据库中找到数据。
@Override
@Transactional(propagation = Propagation.REQUIRED)
public UserRequest save(UserRequest userRequest) throws UserException {
logger.info("Saving the user information {} ", userRequest);
User user = new User(sequenceService.getNextSequenceFor(SequenceNames.USER));
if("admin".equals(userRequest.getFirstName())) {
throw new UserException("Resvered name canot be used : " + userRequest.getFirstName());
}
BeanUtils.copyProperties(userRequest, user,"id");
user = userRepository.save(user);
userRequest.setId(user.getId());
return userRequest;
}
@Override
@Transactional
public List<UserRequest> save(List<UserRequest> users) throws UserException {
for (UserRequest userRequest : users) {
save(userRequest);
}
return users;
}
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}
用户请求:
[
{
"firstName": "John",
"lastName": "A",
"mobileNo": "9898989892",
"emailId": "john.a@gmail.com"
},
{
"firstName": "admin",
"lastName": "A",
"mobileNo": "9898989892",
"emailId": "admin.a@gmail.com"
}
]
此代码将John的数据保存在数据库中。仅针对用户管理员回滚。它不会回滚所有用户数据。不会发生部分回滚。
答案 0 :(得分:0)
在版本4之前,MongoDB仅支持原子性on the level of a single document。 Spring Data Mongo没有提供任何其他功能来克服此缺点。但是,从MongoDB 4和Spring Data Mongo 2.1开始,可以通过配置MongoTransactionManager
来实现,请参见Spring Data Mongo documentation。但是,我不确定Propagation
中的任何选项(来自JPA规范)是否适用于MongoDB事务功能。