Java 更新或保存或在CRUDRepository中更新

Java 更新或保存或在CRUDRepository中更新,java,spring,spring-boot,spring-data,Java,Spring,Spring Boot,Spring Data,我知道前面已经回答了一个类似的问题,但我的问题是实现save with update,而接口中有3种方法。 我目前在我的项目中使用以下方法,不知道如何在这个项目中进行saveOrUpdate。 以下是我的课程: public interface CompanyRepository extends CrudRepository<Company,Long>{ Company findByCompanyName (String companyName); List<

我知道前面已经回答了一个类似的问题,但我的问题是实现save with update,而接口中有3种方法。 我目前在我的项目中使用以下方法,不知道如何在这个项目中进行saveOrUpdate。 以下是我的课程:

   public interface CompanyRepository extends CrudRepository<Company,Long>{
   Company findByCompanyName (String companyName);
   List<Company> findAll();
   Company findById(Long id);
   }
提前谢谢。 我到处阅读,花了5个小时尝试了很多东西。
我只想让CompanyRepository实现所有3个方法,而不必在其他类中重写它们,但如果我也这样做了,那么请解释一下,因为我的部分代码依赖于CompanyRepository。我只想添加带更新的保存,请解释我的代码。

crudepository
只有
save
,但它也充当
update

  • 当您对id为空的实体执行
    保存
    操作时,它将执行
    保存
  • 当您对具有现有
    id
    的实体执行
    save
    操作时,它将执行
    更新
    ,这意味着在您使用
    findById
    并更改对象中的某些内容之后,您可以在此对象上调用
    save
    ,它实际上会执行
    update
    ,因为在
    findById
    之后,您会得到一个数据库中存在的已填充
    id
    的对象
  • crudepository
    中的
    save
    可以接受实体类型的单个实体或
    Iterable

在下面输入如果选中“解决我的问题”和“保存”方法作为“保存和更新”,则在我通过id时更新数据库中的记录,在我不通过id时更新数据库中的新记录 在我的例子中,place是传入对象,newplace是我正在设置place id的位置的新对象

    if(place.getPlaceId()!=0)
        newPlace.setPlaceId(place.getPlaceId());

我在找这样的解释!简单易懂!谢谢@汤姆:对
saveAll
也一样吗?@TheOddAbhi在引擎盖下
saveAll
只需迭代并调用
save
,就可以在所提供的Iterable中找到每个元素。因此,是的,它是相同的(例如)
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy =  GenerationType.AUTO)
protected final Long id;

@Version
private Long version;  
//Getters n setters
}
    if(place.getPlaceId()!=0)
        newPlace.setPlaceId(place.getPlaceId());