【发布时间】:2020-08-18 08:16:39
【问题描述】:
我使用 Spring Data MongoDb 将文档保存在数据库中。
@Repository
public interface UserRepository extends MongoRepository<User, ObjectId> {
Optional<User> findByUsername(String userName);
}
@Document(collection = "users")
public class User {
@Id
private ObjectId id;
@Indexed(unique = true)
private String username;
...
@Service
public class UserUpdateServiceImpl implements UserUpdateService {
private UserRepository repository;
private UserMapper mapper;
@Autowired
public UserUpdateServiceImpl(UserRepository repository, UserMapper mapper) {
this.repository = repository;
this.mapper = mapper;
}
@Override
public void updateDocumentInCollection(UserDto userDto) {
User user = mapper.toEntity(userDto);
repository.save(user);
}
}
org.springframework.dao.IncorrectResultSizeDataAccessException: 查询 {“$java”:查询:{“用户名”:“用户”},字段:{},排序:{}} 返回非唯一结果。
Update_2
我使用了insert操作
/**
* Inserts the given entity. Assumes the instance to be new to be able to apply insertion optimizations. Use the
* returned instance for further operations as the save operation might have changed the entity instance completely.
* Prefer using {@link #save(Object)} instead to avoid the usage of store-specific API.
*
* @param entity must not be {@literal null}.
* @return the saved entity
* @since 1.7
*/
<S extends T> S insert(S entity);
public void updateUser(UserDto userDto) {
User user = mapper.toEntity(userDto);
userRepository.insert(user);
}
这又导致了一个错误。
org.springframework.dao.DuplicateKeyException: E11000 重复键 错误集合:mongo-spring.users 索引:id dup key: { _id: ObjectId('5f3b786085c7d32787990955') };嵌套异常是 com.mongodb.MongoWriteException: E11000 重复键错误 集合:mongo-spring.users 索引:id 复制键:{ _id: ObjectId('5f3b786085c7d32787990955') }
Update_3
我运行单元测试。
@Test
void updateUser() {
UserDto user = readService.getDataOfUserByName("user");
user.setEnabled(true);
user.setAccountNonLocked(true);
List<Role> authorities = user.getAuthorities();
authorities.add(Role.ADMIN);
user.setAuthorities(authorities);
if(user.getUsername() != null)
userUpdateService.updateUser(user);
}
@Override
public void updateUser(UserDto userDto) {
User user = mapper.toEntity(userDto);
userRepository.save(user);
}
- 映射器
public interface CommonMapper<D, E>{
D toDto(E e);
E toEntity(D d);
Iterable<D> toListDto(Iterable<E> entityList);
Iterable<E> toListEntity(Iterable<D> dtoList);
}
@Mapper(componentModel = "spring")
public interface UserMapper extends CommonMapper<UserDto, User> {
}
现在可以了。
当我尝试更新记录时,出现异常...
【问题讨论】:
-
尝试使用 insert。
-
M.Ismail 。我试过了,但又是一个错误。
标签: mongodb spring-boot spring-data-jpa