Spring Cache — не удается взять обьекты

250
21 февраля 2017, 16:47

Добрый день, вроде как все подключил:

servlet-context.xml

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cacheManager-ref="ehcache"/>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
      p:configLocation="/WEB-INF/spring/appServlet/ehcache.xml" p:shared="true" />

ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="ehcache.xsd"
     updateCheck="true" monitoring="autodetect" dynamicConfig="true">
<cache name="category"
       maxEntriesLocalHeap="5000"
       maxEntriesLocalDisk="1000"
       eternal="false"
       diskSpoolBufferSizeMB="20"
       timeToIdleSeconds="200"
       timeToLiveSeconds="500"
       memoryStoreEvictionPolicy="LFU"
       transactionalMode="off">
    <persistence strategy="localTempSwap"/>
</cache>

Имеется сущность категорий, реализовал сериализацию:

@Entity
@Table(name = "categories")
public class Category implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long categoryId;
@Column(nullable = false)
private String name;
private long level;
private long parentId;
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "categories")
private Set<Post> posts;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
public Category() {
}
public Category(User user, long level, String name, long parentId) {
    this.user = user;
    this.level = level;
    this.name = name;
    this.parentId = parentId;
}
// ...
}

А вот, я кеширую методы:

@Service
@Repository
@Transactional
public class CategoryServiceImpl implements CategoryService {
@Resource
private CategoryRepository categoryRepository;
@Override
@CachePut(value = "category", key = "#category.categoryId")
public Category add(Category category) {
    return categoryRepository.saveAndFlush(category);
}
@Override
@Cacheable("category")
public Category findById(long id) {
    return categoryRepository.findOne(id);
}
@Override
@Cacheable("category")
public Category findByParentIdThroughCategoryId(long prntId, long userId) {
    return categoryRepository.findByParentIdThroughCategoryId(prntId, userId);
}
@Override
@Cacheable("category")
public List<Category> findByParentId(long prntId, long userId) {
    return categoryRepository.findByParentId(prntId, userId);
}
@Override
@Cacheable("category")
public List<Category> findAll(long userId) {
    return categoryRepository.findAll(userId);
}
@Override
@CacheEvict("category")
public void remove(long id) {
    categoryRepository.delete(id);
}
}

Когда добавляю категорию, и потом пытаюсь вывести ее, чтобы посмотреть все категории, которые есть у пользователя findByParentId/findAll, то возвращается пустой лист

Это связано как-то, что я кеширую например "category", а потом беру лист категорий, я попробовал взять категорию с id - 11 -- findById, и нашло:

ru.mrchebik.model.Category@f0b8277

READ ALSO
Как сделать окно google play?

Как сделать окно google play?

Каким образом сделать такое окно?

234
Динамическое изменение строк в table через AJAX

Динамическое изменение строк в table через AJAX

Имеется шапка таблицы с пустым телом

296
Почему при 100% ширине блок не на весь экран?

Почему при 100% ширине блок не на весь экран?

Я заметил одну странную особенность Даже страницу для демонстрации сделалЕсли открыть панель инструменты разработчика (F12) и вызвать показ...

263
Показать не все блоки в фильтре

Показать не все блоки в фильтре

Ребят подскажите пожалуйста http://projectsworkshop-it

231