【问题标题】:Insert multiple rows in database using spring boot JPA使用 Spring Boot JPA 在数据库中插入多行
【发布时间】:2019-12-14 00:45:28
【问题描述】:

我是春天的新手。我正在使用带有 JPA 的 Spring Boot 创建 Rest API。我想在数据库 MYSQL 中添加多行。

我已经创建了控制器,我在其中使用存储库中的 save() 方法将数据插入数据库。我想向数据库添加多行,但是当我运行代码时,只有最后一个值被添加到数据库中。如果我每次都尝试为方法创建 Userskill 对象,它可以正常工作,但每次都创建新对象是不可行的。这是控制器代码的一部分。在这里,Userskill 是我要插入数据的模型和表。

    for(int i=0;i<listofskill.size();i++)
     {                           
         userskill.setUser_id(userid);           
         userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
         userskillRepo.save(userskill);          
     }                  

此代码仅添加最后一个值的 1 行。我想将每个值添加到数据库中。

【问题讨论】:

  • 您需要创建一个新对象。该对象代表数据库中的行,一旦保存,它就由 JPA 管理,所有set 方法都会更新托管实体。每行都需要自己的UsersSkill 实例。
  • 但是如果我需要添加 50 行呢?创建 50 个 Userskill 对象是不可行的。
  • 还有什么办法吗?
  • 如上所述,只需创建对象。为什么不可行,世界各地的人们都在这样做。您正在使用 JPA,这意味着您必须以 JPA 方式工作……如果您不希望这样做,请不要使用 JPA。

标签: mysql spring rest spring-boot jpa


【解决方案1】:

试试这个

for(int i=0;i<listofskill.size();i++)
     {     
         UserSkillObject userskill  = new UserSkillObject ();
         userskill.setUserSkillId(newId);           
         userskill.setUser_id(userid);           
         userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
         userskillRepo.save(userskill);          
     }

【讨论】:

  • 这解决了问题,但您正在对数据库进行多次打开。应该有一个牛肚来添加所有数据。
  • @eyoeldefare 您可以使用 saveAll API 一次将所有内容添加到列表中,但为此您需要先创建对象列表。
【解决方案2】:

您可以创建用户技能列表,然后一次添加所有元素,检查以下代码:

List<UserSkillObject> userskillList = new ArrayList<>();

for(int i=0;i<listofskill.size();i++){
   UserSkillObject userskill = new UserSkillObject();
   userskill.setUser_id(userid);           
   userskill.setSkill_id(skillRepo.findByName(listofskill.get(i)).getSkill_id());
   userskillList.add(userskill);
}
userskillRepo.saveAll(userskillList);

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 2020-04-11
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多