使用 Spring Boot JPA 在数据库中插入多行
Posted
技术标签:
【中文标题】使用 Spring Boot JPA 在数据库中插入多行【英文标题】:Insert multiple rows in database using 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。
【参考方案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);
【讨论】:
以上是关于使用 Spring Boot JPA 在数据库中插入多行的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot / JPA / Hibernate,如何根据 Spring 配置文件切换数据库供应商?
在 IntelliJ 中使用 JPA 的 Spring Boot