【发布时间】:2020-09-30 15:12:56
【问题描述】:
我正在使用以下实体:
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
private User user;
private UUID uuid = UUID.randomUUID();
}
和
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String email;
private String firstName;
private String lastName;
private String password;
@OneToMany(mappedBy = "user")
private List<Book> books;
private UUID uuid = UUID.randomUUID();
}
以及以下 DTO:
public class NewBookRequest {
private UUID userUuid;
}
和转换器:
@Component
public class NewBookRequestToEntityConverter implements Converter<NewBookRequest, Book> {
private final ModelMapper modelMapper;
public NewBookRequestToEntityConverter(final ModelMapper modelMapper) {
this.modelMapper = modelMapper;
}
@Override
public Book convert(@NotNull final NewBookRequest source) {
return modelMapper.map(source, Book.class);
}
}
还有部分服务代码:
public void addBook(final NewBookRequest newBookRequest) {
final Book newBook = newBookRequestToEntityConverter.convert(newBookRequest);
bookRepository.save(newBook);
}
当我尝试保存转换后的 Book 实体时,我得到了 ConstraintViolationException 异常,因为 newBook.user.id 为空。但是,正确分配了 newBook.user.uuid。有没有办法通过它的 uuid 自动映射 newBook 的用户?或者唯一的解决方案是这样做:
向转换器添加新方法:
@Component
public class NewBookRequestToEntityConverter implements Converter<NewBookRequest, Book> {
private final ModelMapper modelMapper;
public NewBookRequestToEntityConverter(final ModelMapper modelMapper) {
this.modelMapper = modelMapper;
}
@Override
public Book convert(@NotNull final NewBookRequest source) {
return modelMapper.map(source, Book.class);
}
public Book convert(@NotNull final NewBookRequest source, final User user) {
Book target = modelMapper.map(source, Book.class);
target.setUser(user);
return target;
}
}
并修改服务代码:
public void addBook(final NewBookRequest newBookRequest) {
final User user = userRepository.getUserByUuid(newBookRequest.getUserUuid());
final Book newBook = newBookRequestToEntityConverter.convert(newBookRequest, user);
bookRepository.save(newBook);
}
?感谢您的帮助!
【问题讨论】:
-
我喜欢有人给你的帖子 -1 却没有给出任何解释
标签: java spring spring-data modelmapper