简体   繁体   English

ehcache无法与休眠模式一起使用

[英]ehcache not working with hibernate

I have a dropwizard Application, configured in config.yml in database. 我有一个dropwizard应用程序,在数据库的config.yml中配置。

The properties are: 这些属性是:

hibernate.show_sql: true
javax.persistence.sharedCache.mode: ALL
hibernate.cache.default_cache_concurrency_strategy: read-only
hibernate.cache.region.factory_class: 
org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
hibernate.cache.use_second_level_cache: true

But it seems that ehcache is not working... 但是似乎ehcache无法正常工作...

In the logs I always see the queries and the ehcache log: 在日志中,我总是看到查询和ehcache日志:

Hibernate: select businessel0_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_0_, businessel0_.DBUSERINS as DBUSERINS2_3_0_, businessel0_.DBUSERUPD as DBUSERUPD3_3_0_, businessel0_.INSERTDATE as INSERTDATE4_3_0_, businessel0_.MODIFYDATE as MODIFYDATE5_3_0_, businessel0_.AU_USERIDINS as AU_USERIDINS10_3_0_, businessel0_.AU_USERIDUPD as AU_USERIDUPD11_3_0_, businessel0_.VERSION as VERSION6_3_0_, businessel0_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_0_, businessel0_.DATATYPE as DATATYPE7_3_0_, businessel0_.DESCRIPTION as DESCRIPTION8_3_0_, businessel0_.LONGDESC as LONGDESC9_3_0_, businessel0_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_0_, businessty1_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETYP1_5_1_, businessty1_.DBUSERINS as DBUSERINS2_5_1_, businessty1_.DBUSERUPD as DBUSERUPD3_5_1_, businessty1_.INSERTDATE as INSERTDATE4_5_1_, businessty1_.MODIFYDATE as MODIFYDATE5_5_1_, businessty1_.AU_USERIDINS as AU_USERIDINS8_5_1_, businessty1_.AU_USERIDUPD as AU_USERIDUPD9_5_1_, businessty1_.VERSION as VERSION6_5_1_, businessty1_.DESCRIPTION as DESCRIPTION7_5_1_, businessel2_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_2_, businessel2_.DBUSERINS as DBUSERINS2_3_2_, businessel2_.DBUSERUPD as DBUSERUPD3_3_2_, businessel2_.INSERTDATE as INSERTDATE4_3_2_, businessel2_.MODIFYDATE as MODIFYDATE5_3_2_, businessel2_.AU_USERIDINS as AU_USERIDINS10_3_2_, businessel2_.AU_USERIDUPD as AU_USERIDUPD11_3_2_, businessel2_.VERSION as VERSION6_3_2_, businessel2_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_2_, businessel2_.DATATYPE as DATATYPE7_3_2_, businessel2_.DESCRIPTION as DESCRIPTION8_3_2_, businessel2_.LONGDESC as LONGDESC9_3_2_, businessel2_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_2_ from GD_BUSINESSCODEELEMENT businessel0_ left outer join GD_BUSINESSCODETYPE businessty1_ on businessel0_.GD_BUSINESSCODETYPE=businessty1_.GD_BUSINESSCODETYPE left outer join GD_BUSINESSCODEELEMENT businessel2_ on businessel0_.MASTER_BUSINESSCODEELEMENT=businessel2_.GD_BUSINESSCODEELEMENT where businessel0_.GD_BUSINESSCODEELEMENT=?
2018-03-08 13:11:16,243 DEBUG 99FE394CE00B497699A5A9916B1E9A6A [net.sf.ehcache.store.disk.Segment]: put added 0 on heap
2018-03-08 13:11:16,247 DEBUG 99FE394CE00B497699A5A9916B1E9A6A [net.sf.ehcache.store.disk.Segment]: put added 0 on heap
Hibernate: select businessel0_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_0_, businessel0_.DBUSERINS as DBUSERINS2_3_0_, businessel0_.DBUSERUPD as DBUSERUPD3_3_0_, businessel0_.INSERTDATE as INSERTDATE4_3_0_, businessel0_.MODIFYDATE as MODIFYDATE5_3_0_, businessel0_.AU_USERIDINS as AU_USERIDINS10_3_0_, businessel0_.AU_USERIDUPD as AU_USERIDUPD11_3_0_, businessel0_.VERSION as VERSION6_3_0_, businessel0_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_0_, businessel0_.DATATYPE as DATATYPE7_3_0_, businessel0_.DESCRIPTION as DESCRIPTION8_3_0_, businessel0_.LONGDESC as LONGDESC9_3_0_, businessel0_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_0_, businessty1_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETYP1_5_1_, businessty1_.DBUSERINS as DBUSERINS2_5_1_, businessty1_.DBUSERUPD as DBUSERUPD3_5_1_, businessty1_.INSERTDATE as INSERTDATE4_5_1_, businessty1_.MODIFYDATE as MODIFYDATE5_5_1_, businessty1_.AU_USERIDINS as AU_USERIDINS8_5_1_, businessty1_.AU_USERIDUPD as AU_USERIDUPD9_5_1_, businessty1_.VERSION as VERSION6_5_1_, businessty1_.DESCRIPTION as DESCRIPTION7_5_1_, businessel2_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_2_, businessel2_.DBUSERINS as DBUSERINS2_3_2_, businessel2_.DBUSERUPD as DBUSERUPD3_3_2_, businessel2_.INSERTDATE as INSERTDATE4_3_2_, businessel2_.MODIFYDATE as MODIFYDATE5_3_2_, businessel2_.AU_USERIDINS as AU_USERIDINS10_3_2_, businessel2_.AU_USERIDUPD as AU_USERIDUPD11_3_2_, businessel2_.VERSION as VERSION6_3_2_, businessel2_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_2_, businessel2_.DATATYPE as DATATYPE7_3_2_, businessel2_.DESCRIPTION as DESCRIPTION8_3_2_, businessel2_.LONGDESC as LONGDESC9_3_2_, businessel2_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_2_ from GD_BUSINESSCODEELEMENT businessel0_ left outer join GD_BUSINESSCODETYPE businessty1_ on businessel0_.GD_BUSINESSCODETYPE=businessty1_.GD_BUSINESSCODETYPE left outer join GD_BUSINESSCODEELEMENT businessel2_ on businessel0_.MASTER_BUSINESSCODEELEMENT=businessel2_.GD_BUSINESSCODEELEMENT where businessel0_.GD_BUSINESSCODEELEMENT=?
2018-03-08 13:11:16,252 DEBUG 99FE394CE00B497699A5A9916B1E9A6A [net.sf.ehcache.store.disk.Segment]: put added 0 on heap
Hibernate: select businessel0_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_0_, businessel0_.DBUSERINS as DBUSERINS2_3_0_, businessel0_.DBUSERUPD as DBUSERUPD3_3_0_, businessel0_.INSERTDATE as INSERTDATE4_3_0_, businessel0_.MODIFYDATE as MODIFYDATE5_3_0_, businessel0_.AU_USERIDINS as AU_USERIDINS10_3_0_, businessel0_.AU_USERIDUPD as AU_USERIDUPD11_3_0_, businessel0_.VERSION as VERSION6_3_0_, businessel0_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_0_, businessel0_.DATATYPE as DATATYPE7_3_0_, businessel0_.DESCRIPTION as DESCRIPTION8_3_0_, businessel0_.LONGDESC as LONGDESC9_3_0_, businessel0_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_0_, businessty1_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETYP1_5_1_, businessty1_.DBUSERINS as DBUSERINS2_5_1_, businessty1_.DBUSERUPD as DBUSERUPD3_5_1_, businessty1_.INSERTDATE as INSERTDATE4_5_1_, businessty1_.MODIFYDATE as MODIFYDATE5_5_1_, businessty1_.AU_USERIDINS as AU_USERIDINS8_5_1_, businessty1_.AU_USERIDUPD as AU_USERIDUPD9_5_1_, businessty1_.VERSION as VERSION6_5_1_, businessty1_.DESCRIPTION as DESCRIPTION7_5_1_, businessel2_.GD_BUSINESSCODEELEMENT as GD_BUSINESSCODEELE1_3_2_, businessel2_.DBUSERINS as DBUSERINS2_3_2_, businessel2_.DBUSERUPD as DBUSERUPD3_3_2_, businessel2_.INSERTDATE as INSERTDATE4_3_2_, businessel2_.MODIFYDATE as MODIFYDATE5_3_2_, businessel2_.AU_USERIDINS as AU_USERIDINS10_3_2_, businessel2_.AU_USERIDUPD as AU_USERIDUPD11_3_2_, businessel2_.VERSION as VERSION6_3_2_, businessel2_.GD_BUSINESSCODETYPE as GD_BUSINESSCODETY12_3_2_, businessel2_.DATATYPE as DATATYPE7_3_2_, businessel2_.DESCRIPTION as DESCRIPTION8_3_2_, businessel2_.LONGDESC as LONGDESC9_3_2_, businessel2_.MASTER_BUSINESSCODEELEMENT as MASTER_BUSINESSCO13_3_2_ from GD_BUSINESSCODEELEMENT businessel0_ left outer join GD_BUSINESSCODETYPE businessty1_ on businessel0_.GD_BUSINESSCODETYPE=businessty1_.GD_BUSINESSCODETYPE left outer join GD_BUSINESSCODEELEMENT businessel2_ on businessel0_.MASTER_BUSINESSCODEELEMENT=businessel2_.GD_BUSINESSCODEELEMENT where businessel0_.GD_BUSINESSCODEELEMENT=?
2018-03-08 13:11:16,256 DEBUG 99FE394CE00B497699A5A9916B1E9A6A [net.sf.ehcache.store.disk.Segment]: put added 0 on heap
Hibernate: select statuscode0_.GD_STATUS as GD_STATUS1_15_0_, statuscode0_.DBUSERINS as DBUSERINS2_15_0_, statuscode0_.DBUSERUPD as DBUSERUPD3_15_0_, statuscode0_.INSERTDATE as INSERTDATE4_15_0_, statuscode0_.MODIFYDATE as MODIFYDATE5_15_0_, statuscode0_.AU_USERIDINS as AU_USERIDINS8_15_0_, statuscode0_.AU_USERIDUPD as AU_USERIDUPD9_15_0_, statuscode0_.VERSION as VERSION6_15_0_, statuscode0_.DESCRIPTION as DESCRIPTION7_15_0_ from GD_STATUSCODE statuscode0_ where statuscode0_.GD_STATUS=?
Hibernate: select statuscode0_.GD_STATUS as GD_STATUS1_15_0_, statuscode0_.DBUSERINS as DBUSERINS2_15_0_, statuscode0_.DBUSERUPD as DBUSERUPD3_15_0_, statuscode0_.INSERTDATE as INSERTDATE4_15_0_, statuscode0_.MODIFYDATE as MODIFYDATE5_15_0_, statuscode0_.AU_USERIDINS as AU_USERIDINS8_15_0_, statuscode0_.AU_USERIDUPD as AU_USERIDUPD9_15_0_, statuscode0_.VERSION as VERSION6_15_0_, statuscode0_.DESCRIPTION as DESCRIPTION7_15_0_ from GD_STATUSCODE statuscode0_ where statuscode0_.GD_STATUS=?
2018-03-08 13:11:16,263 DEBUG 99FE394CE00B497699A5A9916B1E9A6A [net.sf.ehcache.store.disk.Segment]: put added 0 on heap

The DAO code is very simple: DAO代码非常简单:

@DAO
public class ContractDAO extends AbstractDAO<Contract> {

    public ContractDAO(SessionFactory sessionFactory) {
        super(sessionFactory);
    }

    public List<Contract> getAll() {
        return list(query(" from Contract c"));
    }

    public Contract getById(int id) {
        return query(" from Contract c where c.id = "+id).getSingleResult();
    }
}

Any idea what is wrong ? 知道有什么问题吗?

You need to configure the persistent objects and queries as cacheable. 您需要将持久对象和查询配置为可缓存的。

Just add @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) to your Contract class to cache the entity. 只需将@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)添加到您的Contract类即可缓存实体。

Then, Hibernate will get the entity from the cache instead of from the database. 然后,Hibernate将从缓存而不是从数据库获取实体。 However, in your case, you are using queries. 但是,就您而言,您正在使用查询。 I am not a dropwizard expect but there is probably a findById somewhere that can replace query(" from Contract c where c.id = "+id) . 我不是一个dropwizard期望的人,但是可能在某个地方可以找到一个findById ,它可以代替query(" from Contract c where c.id = "+id) BTW, you should never concatenate like that. 顺便说一句,您永远不要那样串联。 Use parameters in a prepared statement instead. 而是在准备好的语句中使用参数。

For the getAll , you need to set the query to be cacheable. 对于getAll ,您需要将查询设置为可缓存的。 Again, I don't know how it's done with dropwizard but there must be a setCacheable somewhere. 同样,我不知道如何用dropwizard来完成,但是必须在某个地方有setCacheable

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM