2014-01-27 16 views
4

因爲我沒有在春季論壇上得到答覆,所以我會在這裏試一試。將QueryDslRepositorySupport與接口存儲庫結合使用

有沒有辦法有一個共同的接口存儲庫是由接口擴展方式如下:

@NoRepositoryBean 
public interface CommonRepository<T> extends JpaRepository<T, Long>, QueryDslPredicateExecutor<T> { 
T getById(final long id); 
} 

@Repository 
public interface ConcreteRepository extends CommonRepository<ConcreteEntity> { 
    List<ConcreteEntity> getByNameAndAddress(final String name, final String address); 
} 

public class ConcreteRepositoryImpl extends QueryDslRepositorySupport implements ConcreteRepository { 

    private BooleanExpression nameEquals(final QConcreteEntity entity, final String name) { 
     return entity.eq(name); 
    } 

    public List<ConcreteEntity> getByNameAndAddress(final String name, final String address) { 
     QConcreteEntity entity = QConcreteEntity.concreteEntity; 
     return from(entity).where(entity.name.eq(name).and(entity.address.eq(address))).list(entity); 
    } 
} 

與實現的問題是,我要實現在每個具體類getById(final long id) 。我不想這樣做。通常情況下,春季數據會自動了解每個實體。另外我想要具有QueryDslRepositorySupport的功能。 在我的例子它通常會產生這樣的:

select .. from concreteentity en where en.id = ... 

有沒有解決這個問題的方法嗎?我已經無意中發現 Spring Jpa adding custom functionality to all repositories and at the same time other custom funcs to a single repository

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/repositories.html#repositories.custom-implementations

,但我不認爲這些解決方案是有益的,我並不完全明白,我怎麼可以用它們來解決這個問題。

感謝,

基督教QuerydslRepositorySupport下創建一個通用的getById

+0

你能解決你的問題的末尾的鏈接? –

+0

@TimoWestkämper:修好了,對不起。 –

+0

我想聽聽這位專家的意見。我認爲簡單的答案是,我們需要爲實體創建一個單獨的querydsl存儲庫,與標準存儲庫分開,但這看起來很蹩腳 – chrismarx

回答

0

一種方法是這樣的

T getById(long id) { 
    return getEntityManager().find(getBuilder().getType(), id) 
} 
相關問題