我可以缓存一个ManyToOne hibernate对象而不会延迟加载吗?

时间:2011-01-14 17:32:00

标签: hibernate memcached

@ManyToOne
@JoinColumn(name = "play_template_id", table = "team_play_mapping" )
public Play getPlay() {
    return play;
}

public void setPlay( Play play ) {
    this.play = play;
}

默认情况下,这是急切的加载。我可以得到它,以便它从缓存中读取播放对象而不会使其延迟加载吗?我是否正确,急切加载会强制它进行连接查询,因此没有缓存?

1 个答案:

答案 0 :(得分:2)

急切加载和延迟加载是获取策略。这意味着如果您指定“eager”加载,它将尽可能少地执行查询,而如果您指定“lazy”,它将尽可能地发布该对象的查询(冒着执行更多查询的风险)。因此,如果您希望从缓存中检索某些内容,则需要一种延迟加载策略,即:除非必要,否则不要从数据库中检索。

但是,您可以尝试根据执行查询的代码应用某个获取配置文件。例如,在代码的某个时刻,您的查询知道最好是急于加载Play,而后来您知道延迟加载Play会更好。

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/performance.html#performance-fetching-profiles