我正在嘗試使用JPA更新現有記錄。以下鏈接似乎表明,更新記錄的唯一方法是爲其編寫更新查詢。 enter link description here使用openJPA持久更新查詢
這很好。但是,我想知道爲什麼我將這個存儲過程用於開放JPA的魔法? 我想,如果我有一個JPA對象,如果我想堅持到數據庫使用類似於此
emf.persist(launchRet)
通話的JPA框架將檢查是否記錄媒體鏈接存在的情況下,如果是這樣,它會繼續對該記錄進行更改,如果沒有,則只會添加一條新記錄。這將是非常酷的。相反,我將不得不最終在更新查詢中自己編寫所有這些邏輯。這很好,但爲什麼我不能只使用存儲過程並將所有必需的值傳遞給它?
UPDATE:CODE解釋什麼是我最後的評論是關於
try{
launchRet = emf.find(QuickLaunch.class, launch.getQuickLaunchId());
if(launchRet==null){
emf.getTransaction().begin();
emf.persist(launchRet);
emf.getTransaction().commit();
}
else{
emf.refresh(launchRet);
}
}
變量啓動被傳遞到方法...
public QuickLaunch UpdateQuickLaunchComponent(QuickLaunch launch)
我會簡單剛纔設置的發現推出launchRet等於到通過的發射?
那麼這是好的,但是我有一個已經someExistingFoo,我想堅持嗎?例如,有人通過FooId搜索someExistingFoo,如果找到了,我應該將它設置爲等於已經傳入的someExistingFoo對象嗎?我會舉一個例子來解釋我在說什麼。 – SoftwareSavant
請參閱我對答案的編輯。 –
啊哈......資本好的先生。我記得在某處讀了一些關於entityManager.Merge(Object obj)的東西,我想我沒有建立連接。感謝您的領導! – SoftwareSavant