Spring JPA 存储库接口定义
2021-03-30 06:27
标签:paper 导致 mongodb 错误 扫描 add interface 注解 因此 翻译:Defining Repository Interfaces ? 首先,定义一个特定的实体类的存储库接口,这个接口必须继承自 这样做可以让您在提供的Spring数据存储库功能之上拓展自己的抽象方法。 ? 下面的例子展示了如何选择性的继承并暴露 例7:选择性的暴露CRUD方法 TIPS :这样子引入,只可以使用在该接口中被定义的方法,即选择性exposed,UserRepository是自定义的接口 ? 在前面的示例中,您为所有域存储库定义了一个通用的基本接口,并公开了 findById 是 CrudRepository提供的方法 ,findByEmailAddress是自定的暴露方法 ? 在你的应用中使用一个唯一的 如果存储库定义扩展了特定于模块的存储库,那么它是特定Spring数据模块的有效候选。 如果域类是用特定于模块的类型注释注释的,那么它是特定Spring数据模块的有效候选。提供第三方数据的注解(比如Spring的 ? 以下示例显示了使用特定于模块的接口(在本例中为JPA)的存储库: 例8:使用模块特定接口的存储库定义 MyRepository和UserRepository在其类型层次结构中扩展了JpaRepository。它们是springdatajpa模块的有效候选者。 以下示例显示了使用通用接口的存储库: 例9:使用通用接口的存储库定义 AmbiguousRepository和ambiguousserrepository在其类型层次结构中只扩展Repository和CrudRepository。当使用一个唯一的Spring数据模块时,这是非常好的,但是多个模块无法区分这些存储库应该绑定到哪些特定的Spring数据。 以下示例显示了使用带批注的域类的存储库: 例10:使用域类和注释的存储库定义 PersonRepository引用Person,Person用JPA@Entity注释进行了注释,因此这个存储库显然属于springdatajpa。UserRepository引用了User,它用springdatamongodb的@Document注释进行了注释。 以下错误示例显示了一个存储库,该存储库使用带有混合批注的域类: 例11:使用具有混合注释的域类的存储库定义(错误示例) 这个例子展示了一个使用JPA和springdatamongodb注释的域类。它定义了两个存储库:JpaPersonRepository和MongoDBPersonRepository。一个用于JPA,另一个用于MongoDB。Spring数据不再能够区分存储库,这会导致未定义的行为。 ? 存储库类型详细信息和区分域类注释用于严格的存储库配置,以识别特定Spring数据模块的存储库候选。在同一个域类型上使用多个特定于持久性技术的注释是可能的,并且可以跨多个持久性技术重用域类型。但是,Spring数据就不能再确定与存储库绑定的唯一模块。,区分存储库的最后一种方法是确定存储库基本包的范围。基本包定义了扫描存储库接口定义的起点,这意味着存储库定义位于适当的包中。默认情况下,注释驱动配置使用configuration类的包。基于XML的配置中的基本包是必需的。,以下示例显示基本包的注释驱动配置: 以下示例显示基本包的注释驱动配置: 例12:基本包的注释驱动配置 Spring JPA 存储库接口定义 标签:paper 导致 mongodb 错误 扫描 add interface 注解 因此 原文地址:https://www.cnblogs.com/masterchd/p/13587180.htmlSpring JPA 定义接口
Repository
并且绑定对应的实体类和主键ID类型。如果想要引用并使用该实体类的CRUD方法,要继承CrudRepository
而不是继承Repository
。微调存储库接口定义
通常,您的存储库接口扩展自`repository`、`CrudRepository`或`PagingAndSortingRepository`。但如果不想扩展Spring数据接口,也可以用`@RepositoryDefinition`为存储库接口添加注释。扩展`CrudRepository`接口中公开的一整套操作实体的方法。如果您希望对要公开的方法有选择性暴露,请将要选择性公开的方法从`CrudRepository`复制到域存储库中。
CrudRepository
接口方法:@NoRepositoryBean
interface MyBaseRepository
S save(S entity);
}
interface UserRepository extends MyBaseRepository
findById(…)
和save(…)
。这些方法被路由到Spring Data提供的您选择的存储的基本存储库实现中(例如,如果您使用JPA,则实现是SimpleJpaRepository
),因为它们与CrudRepository
中的方法签名匹配。因此,UserRepository
现在可以保存用户,按ID查找单个用户,并触发一个按电子邮件地址查找用户的查询。
将存储库和多个Spring Data 模块一起使用
Spring Data
模块会使事情变得简单,因为定义范围内的所有存储库接口都会绑定到Spring Data
模块。有时,应用需要使用不只一个Spring Data
模块。在这种情况下,存储库必须进行持久性技术区分。当它在类路径上检测到多个存储库工厂方法时,Spring数据进入严格的存储库配置模式。使用严格的配置信息来确定存储库定义的Spring数据模块绑定:
@Document
注解和第三方的Jpa数据注解@Entity
)。interface MyRepository extends JpaRepository
interface AmbiguousRepository extends Repository
interface PersonRepository extends Repository
interface JpaPersonRepository extends Repository
@EnableJpaRepositories(basePackages = "com.acme.repositories.jpa")
@EnableMongoRepositories(basePackages = "com.acme.repositories.mongo")
class Configuration { … }
下一篇:五、vba事件
文章标题:Spring JPA 存储库接口定义
文章链接:http://soscw.com/index.php/essay/69870.html