【问题标题】:How to save same object multiple times use Spring Data?如何使用 Spring Data 多次保存同一个对象?
【发布时间】:2017-10-06 09:11:25
【问题描述】:

我想多次保存一个对象,下面的代码不行:

for(int i = 0; i < 5; i++) {
    repository.save(object);
}

然后我把源改成:

List<SomeObject> objectList = new ArrayList<>();
for(int i = 0; i < 5; i++) {
    objectList.add(object);
}
repository.save(object);

但它也不能工作,它只会将对象保存一次到数据库。

可能是因为它指向一个实例,但我想知道是否有一种简单的方法可以多次保存一个对象?

谢谢!

【问题讨论】:

  • 您是要INSERT 5 个新行,还是UPSERT 1 个?如果您每次都想要新条目,您可能需要在每次调用 repository.save 之前更改主键
  • 如果你想在数据库中有多个条目,你必须创建单独的对象。 objectList.add(new Object());然后repository.saveAll(objectList);
  • JPA/sql 日志记录说正在发生什么?这是为了确认 JPA 对象如何使用缓存
  • @RobinJonsson Van Belle 当我使用 Spring BeanUtils 复制对象 5 次并将其插入数据库时​​,它可以工作。但我想知道 spring 是否有一个简单的方法来做到这一点。

标签: java spring-data-jpa


【解决方案1】:

它只保存对象 1 次,因为您每次都使用相同的实例。

所以你第一次使用object,所以现在它有一个ID,,然后你再次使用对象,但正如我们所说,它有一个id,所以要保存它,你的程序更新 它在你的数据库中。

例如,如果你这样做:

for(int i = 0; i < 5; i++) {
    repository.save(new Object());
}

或者如果你有一个对象列表,比如

List<SomeObject> objectList = new ArrayList<>();
for(int i = 0; i < 5; i++) {
    objectList.add(object);
}

你可以这样做:

repository.saveAll(objectList);

现在您在表格中找到 5 行

【讨论】:

  • 避免持续循环。请改用CrudRepository#saveAll
  • 感谢您的回答。但是,我使用org.springframework.data.repository.CrudRepository 接口,它没有saveAll() 方法。但在save(Iterable&lt;S&gt; entities) 方法中,注释为_Saves all given entity._,但它不起作用。
  • 现在我使用 Spring BeanUtil 复制 bean 5 次,并成功插入数据库。这是唯一的方法吗?
  • @YOUNG 如果您使用 CRUD Repo,我认为您可以将保存用于单个实体,也可以用于集合..
【解决方案2】:

我对 Spring 数据不熟悉,可能会误解问题,但通常多次保存同一个对象是没有意义的。

如果您需要数据库中的多个实例,您需要显式创建一个实例的克隆/副本(或多个)并分别保存所有这些实例。

例如在保存对象的循环中添加创建新实例。

【讨论】:

    【解决方案3】:

    使用构造函数,可以多次保存同一个对象:

    Repository.save(new object(String name,String age));
    

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 2014-08-15
      • 1970-01-01
      • 2021-01-10
      • 2018-08-21
      • 2015-05-10
      • 2018-03-10
      • 2016-10-26
      • 1970-01-01
      相关资源
      最近更新 更多