我有兩個名爲Alpha和Beta的Hibernate實體,並且Alpha與Beta有*一對一的關聯。我想在數據庫中創建一個新的Alpha條目,引用一個現有的Beta。我有我想要關聯的Beta條目的主ID,但我沒有實際的實例。目前我儲存的Alpha這樣的(使用Spring的HibernateTemplate的):通過提供外鍵創建/更新Hibernate關聯
Alpha alpha = new Alpha();
alpha.setBeta(hibernateTemplate.load(Beta.class, betaId));
hibernateTemplate.save(alpha);
我想,以避免不必首先加載測試版,但是,因爲它是一種不必要的查詢(我不需要alpha.getBeta ()來包含最新的附加實體 - 理想的情況是Hibernate應該用一個代理來替代它,就像延遲加載一樣)。於是,我嘗試了以下(記住,存在與betaId一個測試項):
Alpha alpha = new Alpha();
Beta beta = new Beta(betaId);
alpha.setBeta(beta);
hibernateTemplate.save(beta);
這工作,但記錄顯示,休眠還是那張和查詢測試版在後端。更糟糕的是,如果該關聯配置了級聯,則空的Beta條目將覆蓋現有的條目。
那麼,有沒有什麼辦法通過只提供外鍵和Hibernate不必查詢關聯表來創建或更新這種關聯?理想情況下,我想複製這樣的SQL語句:
UPDATE alpha SET beta_id = :beta_id WHERE alpha_id = :alpha_id
出於某種原因,它的工作原理完全作爲一個測試程序說明,而不是在主應用程序。我會進一步調查,但HibernateTemplate.load()應該解決我所有的問題。謝謝。 – Zecrates 2011-02-15 10:54:22