2014-02-16 3 views
0

Только что начал изучать спящий режим и понять спящий кэш второго уровня. Я создал комментарий Entity и попытаюсь работать над ним. Вот мои коды!hibernate понимание уровня 2-го уровня

@Entity 
@Table(name = "comment") 
@FilterDefs(value={@FilterDef(name="projectFilter",[email protected](name="projectID", type="java.lang.Long")), @FilterDef(name="issueFilter", [email protected](name="issueID", type="java.lang.Long"))}) 
@Filters(value={@Filter(name = "projectFilter", condition = "project_id = :projectID"), 
    @Filter(name = "issueFilter", condition = "issue_id = :issueID")}) 
    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE, region="comment") 
    public class Comment { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name = "id", unique = true, nullable = false, precision = 5, scale = 0) 
private long id; 
@Column(name = "project_id", nullable = false) 
private long projectId; 
@Column(name = "issue_id", nullable = false) 
private long issueId; 
@Column(name = "author_id", nullable = false) 
private long auhorId; 
@Column(name = "author_name", nullable = false) 
private String authorName; 
@Column(name = "comment") 
private String comment; 
@Column(name = "created_date") 
private Date createdDate; 

Я хочу получить комментарии пользователей на основе проекта или проекта и проблемы. В DAO я написал следующую функцию для комментариев на основе projectid.

@Autowired 
    private SessionFactory sessionFactory; 
    ... 
    @Override 
    public List<Comment> getAllProjectComments(long projectId) { 
    Session session = getCurrentSession(); 
    Filter filter = session.enableFilter("projectFilter"); 
    filter.setParameter("projectID", projectId); 
    return session.createQuery("from Comment").setCacheable(true).list(); 

} 

и ehcahe.xml ниже

<?xml version="1.0" encoding="UTF-8"?> 
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false"> 
    <diskStore path="java.io.tmpdir/hibernate-cache"/> 

    <defaultCache maxElementsInMemory="500" 
      eternal="false" 
      timeToIdleSeconds="1200" 
      timeToLiveSeconds="2400" 
      overflowToDisk="false" 
      maxElementsOnDisk="1000" 
      diskPersistent="false" 
      diskExpiryThreadIntervalSeconds="1200" 
      memoryStoreEvictionPolicy="LRU"/> 

    <cache name="org.trackMyProject.entity.Comment" 
    maxElementsInMemory="50" 
    maxElementsOnDisk="500" 
    eternal="false" 
     timeToIdleSeconds="30" 
     timeToLiveSeconds="120" 
     overflowToDisk="true" 
    /> 

Я добавил 500 комментариев в таблице 2 projectids.

, когда контроллер вызывает метод DAO для получения комментариев на основе идентификатора проекта и последующего вызова этого идентификатора проекта, кажется, отлично работает с кэшем второго уровня, и БД не попадает. Но если я переключаюсь между 2 идентификаторами проекта, то каждый раз, когда БД попадает, я не хочу.

Может кто-нибудь сказать мне, какую ошибку я сделал или что нужно сделать больше конфигурации.

Спасибо заранее!

EDIT!

классам: hibernate.cfg.xml

<property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <!-- <prop key="hibernate.cache.use_query_cache">true</prop> --> 
     <prop key="hibernate.connection.release_mode">after_transaction</prop> 
     <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 
     <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop> 
     <prop key="hibernate.cache.use_second_level_cache">true</prop> 
     <prop key="hibernate.cache.use_query_cache">true</prop> 
     <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop> 
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop> 
    </props> 
</property> 
</bean> 
+0

возможный дубликат [Что является кешированием первого и второго уровней в Hibernate?] (http://stackoverflow.com/questions/337072/what-is-first-and-second-level-caching-in-hibernate) – NimChimpsky

ответ

0

Вы используете CreateQuery, который будет означать, что вам нужно кэширование на уровне запросов, попробуйте добавить это:

<property name='hibernate.cache.use_query_cache'>true</property> 
+0

уже сделано, что befo повторно! добавлены свойства спящего режима в разделе редактирования! – Debapriya

Смежные вопросы