Java 如何在对象列表中查找对象并按其ID保存-SpringBoot
我有一个包含Java 如何在对象列表中查找对象并按其ID保存-SpringBoot,java,list,spring-boot,Java,List,Spring Boot,我有一个包含bookId的图书对象列表 我必须传递图书对象列表,并将每个对象保存在数据库中的行中 列表如下所示: [ { "bookId": 2 }, { "bookId": 3 }, { "bookId": 2 }, { "bookId": 3 } ] public void addMu
bookId
的图书对象列表
我必须传递图书对象列表,并将每个对象保存在数据库中的行中
列表如下所示:
[
{
"bookId": 2
},
{
"bookId": 3
},
{
"bookId": 2
},
{
"bookId": 3
}
]
public void addMultipleRents(List<RentDto> rentDtoList, long userId){
List<Rent> rentList = Arrays.asList(modelMapper.map(rentDtoList, Rent.class));
RentDto rentDto = new RentDto();
User user = userRepository.findById(userId)
.orElseThrow(()-> new UserNotFoundException("User with id: " +
rentDto.getUserId() + " is not found"));
List<Rent> rent = new ArrayList<>();
for(Rent r : rentList){
r.setRentStart(LocalDateTime.now());
r.setUser(user);
r.setBook(book);
rent.add(r);
}
rentRepository.saveAll(rentList);
}
有人能告诉我代码应该是什么样子吗
我开始这样做:
[
{
"bookId": 2
},
{
"bookId": 3
},
{
"bookId": 2
},
{
"bookId": 3
}
]
public void addMultipleRents(List<RentDto> rentDtoList, long userId){
List<Rent> rentList = Arrays.asList(modelMapper.map(rentDtoList, Rent.class));
RentDto rentDto = new RentDto();
User user = userRepository.findById(userId)
.orElseThrow(()-> new UserNotFoundException("User with id: " +
rentDto.getUserId() + " is not found"));
List<Rent> rent = new ArrayList<>();
for(Rent r : rentList){
r.setRentStart(LocalDateTime.now());
r.setUser(user);
r.setBook(book);
rent.add(r);
}
rentRepository.saveAll(rentList);
}
RentDto.java
public class Rent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDateTime rentStart;
private LocalDateTime rentEnd;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "book_id", referencedColumnName = "id")
private Book book;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
}
公务舱出租{
private Long rentId;
private Long userId;
private Long bookId;
private String userFirstName;
private String userLastName;
private String bookTitle;
private LocalDateTime rentStart;
private LocalDateTime RentEnd;
}
但是我在r.setBook(book)中遇到了错误代码>:
要总结评论线索,请执行以下操作:
您可以自己迭代DTO列表,为每个DTO创建一个Rent
实体,而不必依赖modelMapper
(无论类是什么)。然后将它们放入一个列表中,并将该列表保存为您正在执行的操作
这方面的伪代码可以是这样的(简化):
User User=userRepo.getById(userId)//获取所有租赁的用户
List rentList=newarraylist(rentDtos.size())//您已经知道您期望的列表大小
对于(RentDTO dto:rentDtos){
Book Book=bookRepo.getById(dto.getBookId());//租一本的书
租金=新租金();//创建新租金
…//在此处设置用户、预订和租赁时间
租金列表。添加(租金);
}
rentRepository.saveAll(rentList);
请注意,此(伪)代码并不意味着可编译、快速或处理所有可能的错误,而是让您开始
一个明显的改进是,首先收集一组图书ID,加载这些ID的所有图书(例如作为地图
),然后从该地图将图书分配给租赁
实体。不过我会把它留给你做练习
最后一条建议:由于您是初学者,在深入研究Spring等复杂框架之前,您应该首先掌握基本知识。这些框架使用依赖注入等概念,对象关系映射等。如果您仍然缺少基础知识,则很难正确理解这些内容。要总结注释的线索:
您可以自己迭代DTO列表,为每个DTO创建一个Rent
实体,而不必依赖modelMapper
(无论类是什么)。然后将它们放入一个列表中,并将该列表保存为您正在执行的操作
这方面的伪代码可以是这样的(简化):
User User=userRepo.getById(userId)//获取所有租赁的用户
List rentList=newarraylist(rentDtos.size())//您已经知道您期望的列表大小
对于(RentDTO dto:rentDtos){
Book Book=bookRepo.getById(dto.getBookId());//租一本的书
租金=新租金();//创建新租金
…//在此处设置用户、预订和租赁时间
租金列表。添加(租金);
}
rentRepository.saveAll(rentList);
请注意,此(伪)代码并不意味着可编译、快速或处理所有可能的错误,而是让您开始
一个明显的改进是,首先收集一组图书ID,加载这些ID的所有图书(例如作为地图
),然后从该地图将图书分配给租赁
实体。不过我会把它留给你做练习
最后一条建议:由于您是初学者,在深入研究Spring等复杂框架之前,您应该先掌握好基础知识。这些框架使用了依赖注入、对象关系映射等概念。如果您仍然缺少基础知识,则很难正确理解这些概念。,如果看不到代码的相关部分就很难判断,但我猜book
要么是空的,要么是指一个没有任何id的实体。还有,为什么您要从rentDtoList
转换到rentList
,并额外迭代rentList
,以设置更多值?你为什么不一次就这么做呢(假设没有更多的东西可以租呢?
)?是的,的确如此。我应该从对象列表中获取id
,其中每个对象都有自己的bookId
。但我不知道怎么做。是的,我确实有一个Rent.java
我把它添加到了问题中。当我遍历List
时,如何获取bookId
以将其作为book保存到数据库中?因为我的Rent.java
有Book Book
和User-User
属性。那么,您知道如何通过id获取单个用户,那么通过dto中设置的id获取单个图书有什么问题?它不会产生最好的性能,但它应该让你开始。一旦成功,请尝试获取多个ID的书籍。因为userId
我将作为参数传递,而bookId
我应该从列表中获取我将作为参数传递。它是?但是我不知道怎么做:/嗯,首先你可以遍历DTO列表,从每个DTO中分别获取图书id。嗯,如果看不到代码的相关部分就很难判断,但我猜book
要么是空的,要么是指一个没有任何id的实体。还有,为什么您要从rentDtoList
转换到rentList
,并额外迭代rentList
,以设置更多值?你为什么不一次就这么做呢(假设没有更多的东西可以租呢?
)?是的,的确如此。我应该从对象列表中获取id
,其中每个对象都有自己的bookId
。但我不知道怎么做。是的,我确实有一个Rent.java
我把它添加到了问题中。当我遍历List
时,如何获取bookId
以将其作为book保存到数据库中?因为我的Rent.java
有Book Book
和User-User
属性。那么,您知道如何通过id获取单个用户,那么通过dto中设置的id获取单个图书有什么问题?它不会产生最好的性能,但它应该让你开始。一旦成功