只需提供外键即可创建/更新Hibernate关联

时间:2011-02-15 08:58:25

标签: hibernate associations

我有两个名为Alpha和Beta的Hibernate实体,而Alpha与Beta有一个*对一的关联。我想在数据库中创建一个新的Alpha条目,并引用现有的Beta。我有要关联的Beta条目的主要ID,但我没有实际的实例。目前我正在存储Alpha(使用Spring的HibernateTemplate):

Alpha alpha = new Alpha();
alpha.setBeta(hibernateTemplate.load(Beta.class, betaId));
hibernateTemplate.save(alpha);

我想首先避免加载Beta,因为它是一个不必要的查询(我不需要alpha.getBeta()来包含最新附加的实体 - 理想情况下Hibernate应该用一个替换它代理与延迟加载一样)。所以我尝试了以下内容(请记住,存在betaId的Beta条目):

Alpha alpha = new Alpha();
Beta beta = new Beta(betaId);
alpha.setBeta(beta);
hibernateTemplate.save(beta);

这很有效,但是日志记录显示Hibernate仍然会在后端查询Beta。更糟糕的是,如果该关联已配置级联,则空的Beta条目将覆盖现有的条目。

那么,有没有办法通过提供外键并且Hibernate不必查询关联的表来创建或更新这种关联?理想情况下,我想复制像这样的SQL语句:

UPDATE alpha SET beta_id = :beta_id WHERE alpha_id = :alpha_id

1 个答案:

答案 0 :(得分:0)

HibernateTemplate.load()代表Session.load(),因此它应该完全符合您的要求。启用S​​QL日志记录以确保不发出额外查询。

另见: