我有两个名为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
答案 0 :(得分:0)
HibernateTemplate.load()
代表Session.load()
,因此它应该完全符合您的要求。启用SQL日志记录以确保不发出额外查询。
另见: