我正在学习Spring和Data JPA。我对Ehcache有问题。我想缓存我的一个方法的返回值,该方法从数据库返回一些记录。这是一个预配置Ehcache实例的练习(我假设)。问题是,我不能使用注释@cacheable将我的方法标记为它的返回值应该被缓存的方法。我得到一个不兼容类型编译错误(Required:boolean,Found:String)。下面是我的服务层中的一个类,我认为我应该将@cacheable放在这里(我说的对吗?):
package wad.datatables.service;
import javax.persistence.Cacheable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wad.datatables.domain.Book;
import wad.datatables.repository.BookRepository;
import wad.datatables.view.DataTablesResponse;
@Service
public class JpaDataTablesBookService implements DataTablesBookService {
@Autowired
private BookRepository bookRepository;
@Override
@Transactional(readOnly = true)
@Cacheable("books")
public DataTablesResponse getBooks(String queryString) {
Pageable pageable = new PageRequest(0, 10, Sort.Direction.ASC, "title");
Page<Book> page = bookRepository.findByTitleContaining(queryString, pageable);
DataTablesResponse response = new DataTablesResponse();
response.setTotalRecords(page.getTotalElements());
response.setTotalDisplayRecords(page.getNumberOfElements());
response.setData(page.getContent());
return response;
}
}
和我的存储库层(只有一个类):
package wad.datatables.repository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import wad.datatables.domain.Book;
public interface BookRepository extends JpaRepository<Book, Long> {
Page<Book> findByTitleContaining(String title, Pageable pageable);
}
cache.xml(位于web-inf/spring/中):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd">
<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"/>
</bean>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
</beans>
和ehcache.xml(位于src/main/resources中):
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<cache name="books" maxEntriesLocalHeap="1000" eternal="true" memoryStoreEvictionPolicy="LRU"/>
</ehcache>
错误是因为您使用了错误的可缓存注释。使用org.springframework.cache.annotation.cacheable
代替javax.persistence.cacheable
。
我没有正确使用注释吗? 编译错误: 注释工作正常,可以毫无问题地访问该网页。
2.11 和爪哇7。我正在尝试使用@XmlSchema注释我的包如下所示。 然而,我得到了这个编译错误,“注释类型不适用于这种声明” 有人知道为什么会发生这种事吗?
我正在尝试编译我正在编写的Java Web应用程序,并且我遇到了编译错误,我不知道该怎么办。从我完成的谷歌搜索中,我发现了这个SO问题,但是提问者使用的是EJB,而我的错误是在JPA实体类中。 下面是maven构建错误。 这是我的用户类文件。 我查看了javax.persistence.Index JavaDoc,我的声明是正确的,所以我在这里被难住了,有人知道我做错了什么吗?感谢您的时间和考虑。
我有一个包信息类,它以前在Java 6/7中编译。但是在Java 8中,我会遇到编译错误: * * * * *错误:批注类型不适用于这种声明@NamedNativeQueries({ 错误:注释类型不适用于这种声明@SqlResultSetMappings({***** 这是代码: 先谢谢你的帮助
在编译过程中,我遇到一个错误:“注释类型不适用于这种声明”。和细节: 我使用JDK 1.6.18和@XmlElement在这个版本中不可用。我发现JAXB(它的版本)中的主要问题。它在这里被讨论: XmlElement注释用WebParam脱盐 是否可以替换JAXB实现在JavaJRE 1.6 SE中的版本?。 我使用认可的方法($JAVA_HOME/lib/认可)更新了JDK中的JAXB,但它仍
我试图创建一个基本的存储库,这样我就可以获得Postgres支持的我所在地区的时区。我得到错误“注释类型不适用于这种声明。”我应该如何处理这个问题?为什么不允许我在这里定义查询?