当前位置: 首页 > 面试题库 >

春季:休眠+ ehcache

任小云
2023-03-14
问题内容

我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法:

  1. spring-modules-cache引入@Cacheable注释

  2. ehcache-spring-annotations一个旨在成为继任者的工具集spring-modules-cache

  3. Hibernate cache可以很好地集成到休眠本身中,以使用例如@Cache注释进行缓存。

  4. Programmatic cache使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别)

就我个人而言,我认为spring-modules-cache还不够彻底,因此我可能更愿意考虑发展得更为积极ehcache-spring- annotationsHibernate cache尽管这似乎是最完整的实现(例如,读取和写入缓存等)。

是什么促使使用哪个工具集?请分享您的缓存经验…


问题答案:

我们的项目用途选项3.我们应用注释org.hibernate.annotations.Cache的实体,我们缓存在了Ehcache,配置了Ehcache使用ehcache.xml,并启用和配置Hibernate的二级缓存在hibernate.cfg.xml

    <!-- Enable the second-level cache  -->
    <property name="hibernate.cache.provider_class">
        net.sf.ehcache.hibernate.EhCacheProvider
    </property>
    <property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.EhCacheRegionFactory
    </property>
    <property name="hibernate.cache.use_query_cache">true</property>
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <property name="hibernate.cache.use_structured_entries">true</property>     
    <property name="hibernate.cache.generate_statistics">true</property>

对于大多数实体,我们使用缓存并发策略CacheConcurrencyStrategy.TRANSACTIONAL

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)

我们的Maven项目使用Hibernate 3.3.2GA和Ehcache 2.2.0:

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.3.0.ga</version>
        <exclusions>
            <exclusion>
                <groupId>net.sf.ehcache</groupId>
                <artifactId>ehcache</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.2.1.ga</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>ejb3-persistence</artifactId>
        <version>3.3.2.Beta1</version>
    </dependency>


 类似资料:
  • 问题内容: 我的Maven依赖项出了什么问题。当我包含JPA时,我会列出pf例外 这是我的Maven依赖项 我的例外 和我的源代码 因此,我没有任何想法(不幸的是,没有示例)如何运行Spring boot和休眠两者。 问题答案: 您是否为数据源设置了或?这是一个例子: 有关可以在何处放置配置文件以及如何配置应用程序以处理任何目录中的属性文件的说明,请参阅此链接以获取更多信息。

  • 问题内容: 我正在设计一个基于JPA / Hibernate,Spring和Wicket的新应用。我对DAO和Service层之间的区别还不清楚。根据维基百科,DAO是 一个为某种类型的数据库或持久性机制提供抽象接口的对象,提供某些特定的操作而不公开数据库的详细信息。 我想知道DAO是否可以包含与数据访问无关的方法,但是使用查询执行起来会更容易吗?例如,“获取在一组特定机场上运营的所有航空公司的列

  • 问题内容: 您能否解释以下两种类型的交易之间的区别: 休眠交易 春季交易 我也想知道有关注释的信息。 问题答案: 对于初学者来说,它们都是事务,但是它们包含不同的概念和组件。 TL; DR Hibernate处理数据库特定的事务,而spring提供常规的事务管理服务。是配置事务管理行为的好方法。 长话说: 交易次数 事务基本上是工作的单元(即,对某项的更改),可以作为可提交或回滚的单个操作进行管理

  • 问题内容: 我一直在尝试: 关于我的服务方式,但spring抱怨说: 我该如何解决? 问题答案: 此实现不解决清理问题,我已经实现了类似的解决方案,但也解决了清理问题。可以在以下位置找到该解决方案:http : //shahzad-mughal.blogspot.com/2012/04/spring-jpa-hibernate-support-for- custom.html

  • 问题内容: 我有一个Spring / Hibernate网络应用程序,该应用程序具有一些在内存中的HSQL数据库上运行的集成测试。由于hbm2ddl = create,Hibernate使用了这个空白数据库并创建了我的所有测试表和约束。但是,我有一个新的bean,在它的afterPropertiesSet()方法期间检查数据库中的特定配置值,因此,当初始化此bean时,该行需要存在于数据库中。 有

  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s