在CRUDRepository中更新或saveorUpdate

时间:2017-05-01 13:24:57

标签: java spring spring-boot spring-data

我知道之前已经回答了类似的问题,但我的问题是在接口中使用r 3方法实现save更新。 我目前正在我的项目中使用以下方法。不知道在这里制作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 clas

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

@Version
private Long version;  
//Getters n setters
}

thanx in Advance。 我到处读,试了很多东西5个小时。 我只是希望CompanyRepository实现所有3种方法,而不是在其他类中覆盖它们但是如果我也有解释如何,我的代码依赖于ComapnyRepository的cuz patrt,只是希望添加save with update,plz解释我的代码

2 个答案:

答案 0 :(得分:24)

CrudRepository只有save,但它也充当update

  • 如果您对空save的实体id进行save,则会save
  • 当你对现有id的实体update进行findById时,它会执行save,这意味着在您使用update作为示例并更改对象中的某些内容后,可以在此对象上调用findById,它实际上会执行id,因为在save之后,您会获得数据库中存在的已填充CrudRepository的对象。
  • Iterable中的
  • Process.GetProcesses() 可以接受您实体类型的单个实体或 listBox1.Items.Add(itemChecked + @" " + @"is running" + @" " + DateTime.Now);

答案 1 :(得分:0)

在下面输入是否通过检查解决了我的问题,并且保存方法在保存并更新时起作用,当我通过id时,它会更新数据库中的记录;当我不通过id时,它将新记录保存在数据库中 在我的情况下,place是传入对象,而new place是我要在其中设置场所ID的场所的新对象

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