了解Spring Data接口

时间:2015-12-05 23:08:06

标签: java spring jpa spring-data

我对一些基本的Spring Data概念感到困惑。

据我所知,典型的DAO级别结构如下所示:

   - dao
     - MyFirstObjectDao
     - MySecondObjectDao
     - jpa
        - MyFirstObjectDaoImpl
     - jdbc
        - MySecondObjectDaoImpl

有了这个概念,我可以使用JPA作为我的第一个DAO接口的实现,使用JDBC - 作为第二个接口。

现在我想了解Spring Repository抽象。每个Spring Data教程都指定,我应该有一个接口,例如,它应该从JpaRepository扩展。所以有了这个界面,我已经锁定了JPA,对吧?

如果我想提供不同的实现,例如DAO中的jpa / jdbc,那该怎么办?

1 个答案:

答案 0 :(得分:1)

通常没有很好的理由想要为同一个对象混合JPA和JDBC持久性;如果您已经将所有内容都注释为JPA实体,那么您可以在任何地方使用相同的持久性设置。你应该重新考虑为什么要这样做。

那就是说,如果你真的需要,你可能会这样做:

interface FooBaseRepository extends PagingAndSortingRepository<Long, Foo> {}
interface FooJpaRepository extends FooBaseRepository, JpaRepository<Long, Foo> {}
interface FooJdbcRepository extends FooBaseRepository, JdbcRepository<Long, Foo> {}

@Autowired FooBaseRepository surpriseRepository

更新:如果您只是谈论为不同的类(没有关系)使用不同的持久性策略,那么没有什么特别复杂的。您可以混合使用JpaJdbc个存储库;他们只是接口。