我的團隊有兩個類,User
和Store
,由JPA @ManyToMany
註釋相關。相關代碼如下。JPA @ManyToMany寫作創建但不更新
當創建一個新的User
對象並設置其商店時,生活是美好的。但是當我們通過我們的Struts 2/Spring Web UI嘗試更新用戶對象時,我們發現了一些意外的行爲。 (通過JUnit運行簡單的自動化集成測試時,不會發生這些問題)。
簡單地說,當保存User
時,它的存儲集合沒有更新 - 數據庫沒有顯示更改,並且有問題的User
對象的重新加載顯示它有一組未更改的存儲。
我們發現這個問題的唯一解決方案 - 我們不喜歡這個解決方案,它讓我們團隊中的所有開發人員都有點不安 - 創建一個新的Set
的Store
s,然後做user.setStores(null)
,然後做user.setStores(stores)
。
我們使用的是OpenEntityManagerInViewFilter
;我們使用Hibernate作爲我們的JPA提供者;我們使用Spring的JpaTransactionManager。我們的代碼中沒有任何@Transactional
註釋,並且由於其他地方描述的代理行爲,添加它們會破壞現有代碼。
任何人都可能提供有關我們如何以非噁心方式解決此問題的見解,這是值得歡迎的。
User.java的相關部分:
@ManyToMany
@JoinTable(name = "company.user_store_access",
joinColumns = @JoinColumn(name = "userid"),
inverseJoinColumns = @JoinColumn(name = "storeid"))
public Set<Store> getStores() {
return stores;
}
Store.java的相關部分:
UserDetailAction.java的@ManyToMany(mappedBy = "stores")
public List<User> getUsers() {
return users;
}
相關部分: (道直通向下的層或兩個,然後:)
entity = getEntityManager().merge(entity);
您可以在添加/修改商店的地方添加代碼行嗎? – 2009-06-04 06:36:14