【问题标题】:Hibernate 4 second level cache hibernate is not working with association (EhCache)Hibernate 4 二级缓存休眠不使用关联(EhCache)
【发布时间】:2015-04-24 02:59:37
【问题描述】:

我是休眠新手,正在尝试二级缓存。

我的实体是 Team : OneToMany : Player

团队实体:

@Entity
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Team {

    ...

    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    @OneToMany(fetch=FetchType.LAZY, mappedBy="team")
    @Cascade(CascadeType.ALL)
    private List<Player> players; 

    ...
}

玩家实体:

@Entity
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Player extends Person {

    ... 

    @Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
    @ManyToOne(fetch=FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Team team;

    ....    
}

我的 TeamDao 是:

    @Repository
    public class TeamDao {

        @Autowired
        private SessionFactory sessionFactory;

        ...

        @Transactional
        public Team getTeam(Integer id) {
            return (Team) sessionFactory.getCurrentSession().createQuery("from team t inner join fetch t.players p where t.id = :tid")
                  .setParameter("tid", id)
                  .setCacheable(true)
                  .uniqueResult();

        }

        ...
    }

当我加载一个团队时,例如 id=1,我在二级缓存中找到它。但即使关联被声明为可缓存,我也没有找到加载球队的球员名单。 session.getCache().contains(Team.class, 1);返回真 但是 session.getCache().contains(Player.class, 1) 返回 false

当我试图找到已加载球队的一名球员时,

Player player = playerDao.getPlayer(1); 

即使加载的 Team 包含该玩家,Hibernate 也会生成一个选择来获取该玩家

Player player = team.getPlayer().get(0);  

我的实体注释有问题吗?我不知道为什么它对我不起作用。

感谢您的帮助

【问题讨论】:

    标签: java spring hibernate ehcache


    【解决方案1】:

    解决办法是配置查询缓存,使用spring xml配置:

    <prop key="hibernate.cache.use_query_cache">true</prop>
    

    因为 HQL 请求 createQuery(query) 不会将结果添加到第二级缓存,不像 get、load、save、update 等休眠方法...

    在 HQL 查询中使用 setCacheable(true) 告诉 hibernate 将结果放入查询缓存中。

    唯一剩下的小问题是它不适用于一组团队(它只适用于一个团队)。

    【讨论】:

    • '它不适用于团队集合'。我正面临这个问题,该缓存适用于 findOne() 但不适用于 findAll(List)。知道如何解决吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 2013-07-01
    • 2012-12-12
    • 2010-10-20
    • 2014-11-10
    相关资源
    最近更新 更多