我的Java应用程序每10秒查询一次MySQL服务器。我手动向表中插入新行,但Hibernate无法找到它。
当我手动删除一行时,Hibernate会显示该行存在,我认为这是因为Hibernate缓存导致的。有没有任何方式可以完全禁用它?
当我手动删除一行时,Hibernate会显示该行存在,我认为这是因为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>
public EntityManager getEntityManager(){
if( emf == null ){
if (parameters == null) {
emf = Persistence.createEntityManagerFactory(persistenceUnitName);
} else {
emf = Persistence.createEntityManagerFactory(persistenceUnitName, parameters);
}
} else {
emf.getCache().evictAll();
}
EntityManager em = emf.createEntityManager();
return em;
}
你可以在你的persist方法中使用hints.put("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS);,这可能会起作用。