2012-09-21 56 views
1

背景數據庫唯一鍵,JPA存儲庫和getByUniqueKey簽名:它是如何工作的?

DATATABLE item

+---------+---------+--------+ 
| field | type | index | 
+---------+---------+--------+ 
| id_item | INT  | PK  | 
| name | VARCHAR | UNIQUE | 
+---------+---------+--------+ 

ItemRepository.java

public interface ItemRepository extends CustomRepository<Item, Integer> { 
    public Item getByName(String name); // because of the unique index 
} 

CustomRepository.java

@NoRepositoryBean 
public interface CustomRepository<E, PK extends Serializable> extends PagingAndSortingRepository<E, PK>, JpaSpecificationExecutor<E> { 
    // common methods 
} 

CustomRepositoryImpl.java

public class CustomRepositoryImpl<E, PK extends Serializable> extends SimpleJpaRepository<E, PK> implements CustomRepository<E, PK> { 
    // common methods implementations 
} 

問題

正如你所看到的,不過是沒有界面ItemRepository的實現。這意味着getByName方法只有一個簽名,並且從未在任何地方實現。但它的工作。怎麼樣?

PS

對於持懷疑態度,與Eclipse,保持Ctrl鍵按下和鼠標時在getByName簽名,點擊Open Implementation不打開任何JAVA文件都沒有。

回答

3

Spring將AOP用於存儲庫,並將攔截getByX方法,其中X與bean屬性匹配。在你的例子中,Item bean聲明瞭name屬性,所以Spring爲你攔截它。

請參閱Defining query methods中的Spring Data JPA手冊。

+0

謝謝。它似乎也適用於'findByX'而不是'getByX'? – sp00m

+1

是的:findBy,find,readBy,read,getBy和get都可以。 –

相關問題