以前に回答された同様の質問が既にあることは知っていますが、私の問題は、インターフェイスに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に依存しているため、もしそうであれば説明します。更新で保存を追加したいだけです。コードに関して説明してください。
CrudRepository
にはsave
しかありませんが、update
としても機能します。
save
が空のエンティティでid
を実行すると、save
が実行されます。save
を持つエンティティでid
を実行すると、update
を実行します。つまり、findById
を使用してオブジェクトの何かを変更した後、このオブジェクトでsave
を呼び出すことができ、実際にupdate
を実行します。なぜならfindById
の後に、DBに存在するid
が設定されたオブジェクトを取得するからです。save
のCrudRepository
は、単一のエンティティまたはエンティティタイプのIterable
を受け入れることができます。チェックして私の問題を解決し、保存メソッドが保存と更新の両方で機能している場合、データベースにレコードを更新します場所IDを設定している場所の新しいオブジェクト
if(place.getPlaceId()!=0)
newPlace.setPlaceId(place.getPlaceId());