2017-07-04 68 views
0

我有一個庫B這是我從另一個存儲庫A.延伸ID對於春豆/存儲庫

存儲庫:

@Repository 
public class RepositoryA implements Repository { 

} 

庫B:

@Repository 
public class RepositoryB extends RepositoryA implements RepositoryAux{ 
} 

但是當我嘗試注入存儲庫時,出現以下錯誤:

No unique bean of type [Repository] is defined: expected single matching bean but found 2: [RepositoryA , RepositoryB]

我知道我可以使用annotation @Qualifier來解決它。不過,我的問題是:

  1. 這是正確的覆蓋在子類註釋@Repository?

  2. 我可以爲子類指定一個新的標識符嗎?相反

感謝的提前使用註釋@Qualifier,像@Id或@Name的

+0

您的問題尚不清楚。 --- 1)「覆蓋」@ @ Repository'意味着什麼?除了'@ Repository'註釋之外,'@ Qualifier'註釋必須被賦予*,而不是。 --- 2)'@ Qualifier'與記錄/行標識符(字段/列)無關。 – Andreas

+0

[Spring Data JPA中處理實體繼承的最佳方法]的可能重複(https://stackoverflow.com/questions/27543771/best-way-of-handling-entities-inheritance-in-spring-data-jpa) – xyz

+0

FWIW XXXRepository與JPA API無關,並且與Spring Data JPA有關。更正了標籤 –

回答

3
  1. it's right Overwrite the annotation @Repository in the child class ?

有幾件事你應該考慮:

一個。如果您打算使用RepositoryA作爲存儲庫,那麼您需要兩個都需要@Repository

b。如果你打算使用RepositoryA只提供基本功能,以便RepositoryB(或其他類)可以擴展它,然後進行RepositoryA抽象與NoRepositoryBean

Ç註釋。或者,您可以使用「組合繼承」的原則。總之,您可以將RepositoryA注入RepositoryB並創建facade或wrapper方法來訪問RepositoryB實例上的方法。

  1. Can I assign a new identifier to the child class? Instead of using annotation @Qualifier, Something like @Id or @Name

我想您的意思是javax.inject.Named@Named這基本上等同於@Qualifier

我想你的意思<bean id='...'在這種情況下@Qualifier是做註釋的方式。請參閱spring's documentation