web-dev-qa-db-fra.com

Mettre à jour ou enregistrer ou mettre à jour dans CRUDRepository

Je sais qu'il y a déjà eu une question similaire répondue précédemment, mais mon problème implémente l'enregistrement avec mise à jour alors qu'il y a 3 méthodes dans l'interface. J'utilise actuellement les méthodes suivantes dans mon projet et je ne sais pas comment faire saveOrUpdate dans ce domaine. Voici mes cours:

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

Ce qui suit fait partie de ma classe d'entreprise

@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
 }

Ce qui suit est mon clas baseEntity

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

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

Merci d'avance. J'ai lu partout et essayé tant de choses pendant 5 heures. Je veux juste que CompanyRepository implémente les 3 méthodes sans que je les remplace dans une autre classe, mais si je l'ai aussi, expliquez comment, car une partie de mon code dépend de CompanyRepository. Je souhaite simplement ajouter enregistrer avec mise à jour, veuillez expliquer en ce qui concerne mon code.

10
Anuraag Mishra

CrudRepository n'a que save mais il agit également comme update.

  • Lorsque vous faites save sur une entité avec id vide, cela fera un save.
  • Lorsque vous effectuez save sur une entité avec id existant, cela fera un update ce qui signifie qu'après avoir utilisé findById par exemple et modifié quelque chose dans votre objet, vous pouvez appeler save sur cet objet et il fera en fait un update car après findById vous obtenez un objet avec id rempli qui existe dans votre base de données.
  • save dans CrudRepository peut accepter une seule entité ou Iterable de votre type d'entité.
26
Tom

mettre ci-dessous si la vérification résout mon problème et la méthode d'enregistrement fonctionne comme enregistrer et mettre à jour à la fois lorsque je passe id, il met à jour l'enregistrement dans la base de données et lorsque je ne passe pas id, il sauvegarde un nouvel enregistrement à la base de données. nouvel objet de lieu dans lequel je mets l'identifiant du lieu

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