CRUDRepository 中的 Update 或 saveorUpdate

Posted

技术标签:

【中文标题】CRUDRepository 中的 Update 或 saveorUpdate【英文标题】:Update or saveorUpdate in CRUDRepository 【发布时间】:2017-09-28 21:52:11 【问题描述】:

我知道之前已经回答了一个类似的问题,但我的问题是在界面中有 3 个方法时使用更新实现保存。 我目前在我的项目中使用以下方法,但不知道如何在其中进行 saveOrUpdate。 以下是我的课程:

   public interface CompanyRepository extends CrudRepository<Company,Long>
   Company findByCompanyName (String companyName);
   List<Company> findAll();
   Company findById(Long id);
   

以下是我的公司课程的一部分

@Entity
public class Company extends BaseEntity
 @NotNull
@Size(min = 2, max = 16)
private String companyName;
@Length(max = 60)
private String desc;
//TODO max: add LOGO class later for pic saving
@OneToMany
private List<MobileModel> mobileModels;

public Company()

  super();
  mobileModels = new ArrayList<>();
  

//Getters n setters
 

以下是我的 baseEntity 类

@MappedSuperclass
public abstract class BaseEntity 
@Id
@GeneratedValue(strategy =  GenerationType.AUTO)
protected final Long id;

@Version
private Long version;  
//Getters n setters

提前致谢。 我到处阅读,并在 5 个小时内尝试了很多东西。 我只希望 CompanyRepository 实现所有 3 种方法,而无需我在其他类中覆盖它们,但如果我也有,请解释如何因为我的部分代码依赖于 CompanyRepository。我只是想添加保存更新,请解释我的代码。

【问题讨论】:

【参考方案1】:

如果检查解决了我的问题,并且保存方法在我传递 id 时它会更新数据库中的记录,而当我不传递 id 时它会在数据库中保存新记录时,则将其放在下面 就我而言,地点是传入对象,新地点是我正在设置地点ID的地点的新对象

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

【讨论】:

【参考方案2】:

CrudRepository 只有save,但它也充当update

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

【讨论】:

我正在寻找这样的解释!简单易懂!谢谢! @Tom:saveAll 也一样吗? @TheOddAbhi 在后台 saveAll 只需迭代并为提供的 Iterable 中的每个元素调用 save。所以是的,它是一样的(例如github.com/spring-projects/spring-data-jpa/blob/master/src/main/…) 这必须被选为答案,投票赞成++

以上是关于CRUDRepository 中的 Update 或 saveorUpdate的主要内容,如果未能解决你的问题,请参考以下文章

CRUDRespository 中的 Update 或 SaveorUpdate,是不是有可用的选项

CRUDRespository 中的 Update 或 SaveorUpdate,是不是有可用的选项

我的自定义存储库实现中的 CrudRepository

知识库-简单理解CrudRepository接口中的方法

如何修复CrudRepository.save(java.lang.Object)是springboot中的无法访问方法?

Spring data : CrudRepository 的保存方法和更新