web-dev-qa-db-ja.com

CRUDRepositoryのupdateまたはsaveorUpdate

以前に回答された同様の質問が既にあることは知っていますが、私の問題は、インターフェイスに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に依存しているため、もしそうであれば説明します。更新で保存を追加したいだけです。コードに関して説明してください。

10
Anuraag Mishra

CrudRepositoryにはsaveしかありませんが、updateとしても機能します。

  • saveが空のエンティティでidを実行すると、saveが実行されます。
  • 既存のsaveを持つエンティティでidを実行すると、updateを実行します。つまり、findByIdを使用してオブジェクトの何かを変更した後、このオブジェクトでsaveを呼び出すことができ、実際にupdateを実行します。なぜならfindByIdの後に、DBに存在するidが設定されたオブジェクトを取得するからです。
  • saveCrudRepositoryは、単一のエンティティまたはエンティティタイプのIterableを受け入れることができます。
26
Tom

チェックして私の問題を解決し、保存メソッドが保存と更新の両方で機能している場合、データベースにレコードを更新します場所IDを設定している場所の新しいオブジェクト

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