Springboot應(yīng)用中@EntityScan和@EnableJpaRepositories的使用詳解
在Springboot應(yīng)用開發(fā)中使用JPA時(shí),通常在主應(yīng)用程序所在包或者其子包的某個位置定義我們的Entity和Repository,這樣基于Springboot的自動配置,無需額外配置,我們定義的Entity和Repository即可被發(fā)現(xiàn)和使用。但有時(shí)候我們需要定義Entity和Repository不在應(yīng)用程序所在包及其子包,那么這時(shí)候就需要使用@EntityScan和@EnableJpaRepositories了。
上面提到的Entity和Repository指的是通過類似下面的方式定義的Entity和Repository :
@Entity
@Table(name = "grade")
public class Grade {
// 省略具體內(nèi)容
}
@Repository
public interface GradeRepository extends JpaRepository<Grade, Long>, JpaSpecificationExecutor<Grade> {
// 省略具體內(nèi)容
}
@EntityScan
@EntityScan用來掃描和發(fā)現(xiàn)指定包及其子包中的Entity定義。其用法如下:
@EntityScan(basePackages = {"com.department.entities","come.employee.entities"})
如果多處使用@EntityScan,它們的basePackages集合能覆蓋所有被Repository使用的Entity即可,集合有交集也沒有關(guān)系。
但是如果不能覆蓋被Repository使用的Entity,應(yīng)用程序啟動是會出錯,比如:
Not a managed type: com.customer.entities.Customer
@EnableJpaRepositories
@EnableJpaRepositories用來掃描和發(fā)現(xiàn)指定包及其子包中的Repository定義。
其用法如下:
@EnableJpaRepositories(basePackages = {"com.department.repositories","come.employee.repositories"})
如果多處使用@EnableJpaRepositories,它們的basePackages集合不能有交集,并且要能覆蓋所有需要的Repository定義。
如果有交集,相應(yīng)的Repository會被嘗試反復(fù)注冊,從而遇到如下錯誤:
The bean ‘OrderRepository’, defined in xxx, could not be registered. A bean with that name has already been defined in xxx and overriding is disabled.
如果不能覆蓋所有需要的Repository定義,會遇到啟動錯誤:
Parameter 0 of method setCustomerRepository in com.service.CustomerService required a bean of type ‘come.repo.OrderRepository’ that could not be found.
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
gateway與spring-boot-starter-web沖突問題的解決
這篇文章主要介紹了gateway與spring-boot-starter-web沖突問題的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Spring Boot實(shí)戰(zhàn)之靜態(tài)資源處理
這篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之靜態(tài)資源處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
java實(shí)現(xiàn)下載文件到默認(rèn)瀏覽器路徑
這篇文章主要介紹了java實(shí)現(xiàn)下載文件到默認(rèn)瀏覽器路徑,具有很好的參考價(jià)值,希望對的大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實(shí)例
本篇文章主要介紹了Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)翻轉(zhuǎn)的方法實(shí)例,詳細(xì)的介紹了3種實(shí)現(xiàn)方法,有興趣的可以了解一下。2017-04-04
詳解@ConditionalOnMissingBean注解的作用
這篇文章主要介紹了詳解@ConditionalOnMissingBean注解的作用,@ConditionalOnMissingBean,它是修飾bean的一個注解,主要實(shí)現(xiàn)的是,當(dāng)你的bean被注冊之后,如果而注冊相同類型的bean,就不會成功,它會保證你的bean只有一個,需要的朋友可以參考下2023-10-10
Spring Boot整合elasticsearch的詳細(xì)步驟
這篇文章主要介紹了Spring Boot整合elasticsearch的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

