2012-09-21 52 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都可以。 –

相关问题