2012-01-16 59 views
2

我有大約100,000個我想要插入數據庫的對象。我想利用Spring/Hibernate並創建List<MyPojo>並使用session.saveOrUpdate()來執行插入。Spring/Hibernate - 如何通過外鍵ID插入記錄?

但是,MyPojo對象包含大約25個外鍵。要通過Id執行這麼多的查找來獲得實際引用的對象將是非常低效的。

因此,我想只使用外鍵id(與存儲在數據庫中的方式相同),而不是加載每個對象。

在運行本機查詢之外,是否有另一種解決方案來執行此操作?

謝謝!

+0

這是功課的一部分嗎?或者你自己的自學。因爲擁有一張25個外鍵的桌子是很難相信的。我會認真考慮首先正常化/重新設計我的數據庫模式。 – Gaurav 2012-01-16 18:05:53

+0

這是一張現有的表格,其背後的理由超出了範圍。我只是想知道是否可以通過Spring /休眠 – user973479 2012-01-16 18:34:42

回答

2

您可以通過映射外鍵和對象,但將對象標記爲懶惰而不是「可更新」而不是「可插入」。

這是對象,但不用於寫入值。

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "MY_POJO_FK", insertable = false, updatable = false) 
private MyPojo myPojo; 

下面是通常

@Column(name = "MY_POJO_FK") 
private Long myPojoFK; 

這種方法的缺點是你必須單獨(無級聯)更新的異物,但好處是,你將不會加載外國映射的外鍵對象,直到你需要它們。

如果您只是將其映射爲寫入數據,則根本不需要擔心映射對象。

+0

來做到這聽起來像我正在尋找的東西。我會嘗試一下。謝謝! – user973479 2012-01-16 19:02:48