我对一些基本的Spring Data概念感到困惑。
据我所知,典型的DAO级别结构如下所示:
- dao
- MyFirstObjectDao
- MySecondObjectDao
- jpa
- MyFirstObjectDaoImpl
- jdbc
- MySecondObjectDaoImpl
有了这个概念,我可以使用JPA作为我的第一个DAO接口的实现,使用JDBC - 作为第二个接口。
现在我想了解Spring Repository抽象。每个Spring Data教程都指定,我应该有一个接口,例如,它应该从JpaRepository扩展。所以有了这个界面,我已经锁定了JPA,对吧?
如果我想提供不同的实现,例如DAO中的jpa / jdbc,那该怎么办?
答案 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
更新:如果您只是谈论为不同的类(没有关系)使用不同的持久性策略,那么没有什么特别复杂的。您可以混合使用Jpa
和Jdbc
个存储库;他们只是接口。