JPA中JpaRepository接口的使用方式

JPA JpaRepository接口的使用

SpringData的所有接口

CrudRepository接口 ,其中提供瞭這些方法提供使用,同時繼承瞭其父接口的方法

其中saveAndFlush()方法就相當於hibernate中的saveOrUpdate()和JPA中的merge()

	@Test
	public void JpaRepository() {
		Person person = new Person();
		person.setId(27);
		person.setName("ab");
		person.setAge(22);
		person.setEmail("[email protected]");
		//該方法就相當於hibernate中的saveOrUpdate()和JPA中的merge()
		personRepositoiry.saveAndFlush(person);
	}

該接口提供瞭JPA的相關功能

List<T> findAll(); //查找所有實體
List<T> findAll(Sort sort); //排序、查找所有實體
List<T> save(Iterable<? extends T> entities);//保存集合 void flush();//執行緩存與數據庫同步
T saveAndFlush(T entity);//強制執行持久化
void deleteInBatch(Iterable<T> entities);//刪除一個實體集合

Jpa Repository繼承自定義接口的主意事項

今天翻看別人寫的項目,看到大神在Repository的接口裡又繼承瞭一個自定義接口,覺得這樣寫挺好,後面註入還是用原來Repository,然後我就把當下自己手裡項目也改瞭改,結果啟動報錯,錯誤信息大致如下。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘TestService’: Unsatisfied dependency expressed through field ‘repository’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘TestRepository’: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query method public abstract void net.csdn.repository.Test.batchSave(java.util.List)! No property batchSave found for type TestEntity!

整體代碼如下

1.自定義接口

public interface Test{
    public void batchSave(List<TestEntity> list);
}

2.創建一個接口,該接口 extends JpaRepository 或者 CurdRepository, 以及上面自己定義的接口 Test

public interface TestRepository extends CrudRepository<TestEntity, Integer>, Test{
}

3.實現TestCustom自定義接口,類名我自然而然寫成TestService此類的

public class TestService implements Test{
 public void batchSave(List<TestEntity> list){
  //.....
 }
}

解決方案

自定義接口的實現類名是有要求的,必須以 2 中創建的接口的名字TestRepository加上 Impl 來聲明,例如

public class TestRepositoryImpl implements Test{
 public void batchSave(List<TestEntity> list){
  //.....
 }
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: