<T> T findOrCreate(Supplier<Optional<T>> finder, Supplier<T> factory)
をすべてのリポジトリに紹介します。 新しいインターフェイスが作成されました春のデータリポジトリを拡張する
@NoRepositoryBean
public interface ExtendedJpaRepository<T, ID extends Serializable> extends JpaRepository<T, ID> {
T findOrCreate(Supplier<Optional<T>> finder, Supplier<T> factory);
}
public class ExtendedJpaRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRepository<T, ID> implements ExtendedJpaRepository<T, ID> {
private final JpaEntityInformation entityInformation;
private final EntityManager entityManager;
public ExtendedJpaRepositoryImpl(JpaEntityInformation entityInformation, EntityManager entityManager) {
super(entityInformation, entityManager);
this.entityInformation = entityInformation;
this.entityManager = entityManager;
}
@Override
public T findOrCreate(Supplier<Optional<T>> finder, Supplier<T> factory) {
throw new NotImplementedException("No implemented yet");
}
}
次に、このインタフェースを具体的なリポジトリに使用します。 RecipeIngredientRepository:
public interface RecipeIngredientRepository extends ExtendedJpaRepository<RecipeIngredient, Long> {}
私はようやく私のサービスにリポジトリを注入すると、私は次の例外を取得:
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'recipeIngredientRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property find found for type RecipeIngredient! Did you mean 'id'?
それは私のentitiy RecipeIngredient
でfind
プロパティを探しています。私はこれをやりたいとは思わなかった。これはJPA Query Methodsに関連していると思います。だから、名前をfindOrCreate
からxxx
に変更して、成功していないクエリメソッドの検出をバイパスしました。次にxxx
プロパティを検索します。
春データがこのプロパティを検索するのは何ですか? 私はorg.springframework.boot:spring-boot-starter-data-jpa
を使用しています。
ありがとうございました!まあ、私はこの文書に従った!しかし、@EnableJpaRepositories( "org.project.data.repository")を使って、repositoryBaseClassの代わりにbasePackagesを指定しました。 @EnableJpaRepositoriesアノテーションでエラーが発生するとは思っていませんでした。 – kfaria