Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在对象列表中查找对象并按其ID保存-SpringBoot_Java_List_Spring Boot - Fatal编程技术网

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获取单个图书有什么问题?它不会产生最好的性能,但它应该让你开始。一旦成功