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.save(java.lang.Object)是springboot中的无法访问方法?