Я включил Hibernate L2 Cache в Spring Data с помощью поставщика EHcache.
Я использую Spring Boot 2.1.0.RELEASE
Приложение Ehcache Hibernate
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.4.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.1.Final</version>
</dependency>
.properties
spring.jpa.show-sql=true
logging.level.root=INFO
# jpa properties
spring.jpa.properties.hibernate.show-sql=true
spring.jpa.properties.hibernate.format-sql=true
# statistics
spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#spring.jpa.properties.javax.persistence.sharedCache.mode=ALL
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
Моя сущность
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TCountry")
@Data
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class TCountry {
@Id
private String countryCode;
@Column(name = "region_code")
private String regionCode;
@Column(name = "entryTime")
private Date entryTime;
private String entryUser;
}
Репозиторий
public interface TCountryRepository extends CrudRepository<TCountry, String> {
@Override
@QueryHints({
@QueryHint(name = "org.hibernate.cacheable", value = "true")})
List<TCountry> findAll();
}
Тест
@Test
public void contextLoads() throws InterruptedException {
log.info("found {}", tCountryRepository.findAll());
TCountry ad = tCountryRepository.findById("AD").get();
ad.setEntryTime(new Date());
tCountryRepository.save(ad);
log.info("found {}", tCountryRepository.findAll().stream().filter(
c -> c.getCountryCode().equals("AD")).findAny().get());
}
Когда я сохраняю и запускаюfindAll()
снова идет в базу данных снова.Я думаю, что при сохранении будет обновлен кеш.
Если я удаляю save()
, он не попадает в базу данных.
Я что-то упустил?Если после сохранения () он попадает в базу данных, тогда какой смысл в кеше!