2016-08-29 78 views
0

假設我在兩個實體類Person和Address之間有一個雙向的@many_to_Many關係。如何更新關聯表而不更新實體類

在我的情況下,關聯表Person_Address未填充表Person和Address時填充。如果我在Person和Address表中已經有幾個條目,那麼我需要將關聯記錄添加到Person和Address中,如何在JPA和Hibernate中執行此操作?

Person 
1 John 
2 Mary 
3 Kate 

Address 
1 The 2nd Street 
2 The 3rd Street 

現在我有一種方法來添加「約翰」和「第二街」之間的關聯,如何做到這一點?

public void associate(Person person, Address address) { 
    log.info("Associating ..."); 

    entityManager.persist(???); // there is no explicit PersonAddress enitty 
} 

這是關聯表的常見情況嗎?

+1

CLASSES在哪裏?這些CLASSES之間的關係是什麼?如果你沒有它的對象,你不會更新它。更新您的對象字段。畢竟您正在使用O-O編程語言...... –

回答

0

我會嘗試,但不更新實體類來創建一個多個實體PersonAdress映射到關聯表,並在你的方法保存它..

1

你不能在JPA做到這一點,它不是JPA是如何工作的。鏈接表用於支持實體,默認情況下不是實體本身,因此不能孤立地更新。

如果您需要在不更新實體更新鏈接表(要誠實似乎有點怪我!),你可以下拉到本地SQL:

Query q = entityManager.createNativeQuery("update ..."); 
q.executeUpdate() 

你最好的辦法不過是允許JPA使用正確的級聯屬性集來管理這種關係。然後它變成一個簡單的情況:

person.getAddresses().add(address); 
address.getPeople().add(person); 
entityManager.persist(person); 
+0

實體表填充時,是否有應用程序的鏈接(關聯)未知?如何在關係數據庫中建模?例如,兩組人可能會成爲未來的朋友。每當來自每個組的兩個人成爲朋友時,需要將記錄添加到鏈接表中。不應該在JPA中將它建模爲@many_to_many關係嗎?或者有更好的選擇? – user697911

+0

這是JPA非常常見的用例,它可以很好地處理多對多關係。將每個實體添加到相反的集合然後保存實體是一個簡單的例子。 JPA然後在鏈接表中爲您創建一個條目。繞過JPA顯然是可能的,我不明白這會帶來什麼樣的好處...... – StuPointerException

+0

我的問題是,如何處理「先添加實體,然後再添加JPA鏈接表中的鏈接,而不更新實體類「。即「約翰」和「瑪麗」在兩張男性和女性的表格中。其他兩個表填充時,鏈接表Friend最初爲空。有一天,我需要在朋友表中添加「約翰」和「瑪麗」之間的鏈接。在JPA中如何處理這個問題?這是我的原始問題。 – user697911