2013-07-27 55 views
0

我是一個完整的彈簧數據noob。我有一個界面如下Spring數據存儲庫緩存結果

public interface UserBalanceRepository extends PagingAndSortingRepository<UserBalance, Integer> 
{ 
    @Cachable("UserList") 
    @Query("select userId from UserBalance") 
    List<Integer> ListUserIds(Pageable pageable); 
} 

我的緩存配置是這樣的:

<cache:annotation-driven /> 

<!-- generic cache manager --> 
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> 
    <property name="caches"> 
    <set> 
     <bean class="org.springframework.cache.concurrent.ConcurrentCacheFactoryBean" p:name="UserList"/> 
    </set> 
    </property> 
</bean> 

緩存也絕對沒有什麼。我想這是因爲代理類沒有@Cachable註解,但我如何使緩存工作?有沒有不同的方法來做緩存?

我最後的手段是將需要緩存的調用放入包裝類和緩存中。

+0

你的緩存設置是什麼樣的? –

+0

非常基本。我只是使用書籍的例子。但根據我的理解,問題在於AspecJ不會在界面上觸發切入點。 – Leon

+0

根本沒有AspectJ參與。請添加您的緩存配置,否則很難判斷髮生了什麼。如果您只是正確地配置緩存,使用'@ Cacheable'就像您所顯示的那樣工作。 –

回答

0

我正面臨同樣的問題。你的代碼和我的一樣。我正在使用eclipseLink,我也必須在persistence.xml上啓用緩存。我剛剛添加了一個屬性,

 [...] 
     <class>com.project.web.model.entity.ReturnOrder</class> 
     <class>com.project.web.model.entity.BillingAddress</class> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://connection string"/> 
      <property name="javax.persistence.jdbc.user" value="user"/> 
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> 
      <property name="javax.persistence.jdbc.password" value="pass"/> 

      <!-- PROPERTY ADDED --> 
      <property name="eclipselink.cache.shared.default" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

另外,this是一個很好的教程。