Hibernate 用户实体和地址实体之间的一对多注释,在地址 table 我没有与用户 ID 的关联
Hibernate One to Many Annotation between user Entity and Address Entity, in the Address table I don't have the association with user id
我创建了一个用户实体,它有一个地址列表(用户实体中的@OneToMany 注释)和(地址实体中的@ManyToOne 注释)
用户和地址创建得很好,但是我没有通过数据库中的用户 ID 获得关联。
在地址 Table 我有列 users_id null
这是我失眠的请求:
用户实体:
@OneToMany(mappedBy = "userEntity" , cascade=CascadeType.ALL)
private List<AdressesEntity> adresses ;
地址实体
@ManyToOne
@JoinColumn(name = "users_id")
private UserEntity userEntity;
我的管理员:
@PostMapping(
consumes = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE}
)
public ResponseEntity<UserResponse> CreatUser(@RequestBody UserRequest userRequest)
throws Exception {
if(userRequest.getFirstName().isEmpty()) {
throw new UserException(ErrorMessages.MISSING_REQUIRED_FIELD.getErrorMessage());
}
//UserDto userDto = new UserDto();
//BeanUtils.copyProperties(userRequest, userDto);
ModelMapper modelMapper = new ModelMapper();
UserDto userDto = modelMapper.map(userRequest, UserDto.class);
UserDto createUser = userService.CreateUser(userDto);
UserResponse userResponse = modelMapper.map(createUser, UserResponse.class);
return new ResponseEntity<UserResponse>(userResponse,HttpStatus.CREATED);
}
CreateUser(UserDto userDto) 的服务实现:
@Override
public UserDto CreateUser(UserDto userDto) {
// check exiting user
UserEntity checkExisting_User = userRepository.findByEmail(userDto.getEmail());
if (checkExisting_User != null)
throw new RuntimeException("user already exist !");
for (int i = 0; i < userDto.getAdresses().size(); i++) {
AdresseDto address = userDto.getAdresses().get(i);
address.setUserDto(userDto);
address.setAdesseId(util.generatedValue(30));
userDto.getAdresses().set(i, address);
}
userDto.getContact().setUser(userDto);
userDto.getContact().setContactId(util.generatedValue(30));
ModelMapper modelMapper = new ModelMapper();
UserEntity userEntity = modelMapper.map(userDto, UserEntity.class);
userEntity.setEcryptyPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
userEntity.setUserId(util.generatedValue(32));
UserEntity newUser = userRepository.save(userEntity);
UserDto userDto1 = modelMapper.map(newUser, UserDto.class);
return userDto1;
}
我该怎么做?
尝试替换
@JoinColumn(名称=“users_id”)
@JoinColumn(name="users_id", referencedColumnName="id 或 user_id 取决于您可以使用的列")
问题是你错误地在实体上创建关系。
或者使用
JoinColumn(name = "user_id")
我觉得很有帮助。
我创建了一个用户实体,它有一个地址列表(用户实体中的@OneToMany 注释)和(地址实体中的@ManyToOne 注释)
用户和地址创建得很好,但是我没有通过数据库中的用户 ID 获得关联。
在地址 Table 我有列 users_id null
这是我失眠的请求:
用户实体:
@OneToMany(mappedBy = "userEntity" , cascade=CascadeType.ALL)
private List<AdressesEntity> adresses ;
地址实体
@ManyToOne
@JoinColumn(name = "users_id")
private UserEntity userEntity;
我的管理员:
@PostMapping(
consumes = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE},
produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE}
)
public ResponseEntity<UserResponse> CreatUser(@RequestBody UserRequest userRequest)
throws Exception {
if(userRequest.getFirstName().isEmpty()) {
throw new UserException(ErrorMessages.MISSING_REQUIRED_FIELD.getErrorMessage());
}
//UserDto userDto = new UserDto();
//BeanUtils.copyProperties(userRequest, userDto);
ModelMapper modelMapper = new ModelMapper();
UserDto userDto = modelMapper.map(userRequest, UserDto.class);
UserDto createUser = userService.CreateUser(userDto);
UserResponse userResponse = modelMapper.map(createUser, UserResponse.class);
return new ResponseEntity<UserResponse>(userResponse,HttpStatus.CREATED);
}
CreateUser(UserDto userDto) 的服务实现:
@Override
public UserDto CreateUser(UserDto userDto) {
// check exiting user
UserEntity checkExisting_User = userRepository.findByEmail(userDto.getEmail());
if (checkExisting_User != null)
throw new RuntimeException("user already exist !");
for (int i = 0; i < userDto.getAdresses().size(); i++) {
AdresseDto address = userDto.getAdresses().get(i);
address.setUserDto(userDto);
address.setAdesseId(util.generatedValue(30));
userDto.getAdresses().set(i, address);
}
userDto.getContact().setUser(userDto);
userDto.getContact().setContactId(util.generatedValue(30));
ModelMapper modelMapper = new ModelMapper();
UserEntity userEntity = modelMapper.map(userDto, UserEntity.class);
userEntity.setEcryptyPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
userEntity.setUserId(util.generatedValue(32));
UserEntity newUser = userRepository.save(userEntity);
UserDto userDto1 = modelMapper.map(newUser, UserDto.class);
return userDto1;
}
我该怎么做?
尝试替换
@JoinColumn(名称=“users_id”) @JoinColumn(name="users_id", referencedColumnName="id 或 user_id 取决于您可以使用的列")
问题是你错误地在实体上创建关系。
或者使用 JoinColumn(name = "user_id")
我觉得很有帮助。