我從數據庫填充詳細視圖時遇到問題。OpenXava從數據庫填充集合
的application.xml片段:
<module name="ModuleB">
<model name="B"/>
<view name="ViewB"/>
...
<mode-controller name="DetailOnly"/>
</module>
我有三個實體類:
@Entity
@Table(name="A")
class A {
@OneToMany(mappedBy = "a")
@ListProperties("col1")
@CollectionView("cs")
private Collection<C> cs;//+getter/setters
}
@Entity
@Table(name="A")
@View(name = "ViewB", ...)
class B {
@OneToMany(mappedBy = "a")
@ListProperties(...)
@CollectionView("ViewC")
private Collection<C> cs;//+getter/setters
}
@Entity
@Table(name="C")
@View(name = "ViewC", ...)
class C {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
}
我想通過點擊一個鏈接,然後修改,以從數據庫中讀取中現有b實例/修改它。 當我使用getView().setModel()或甚至使用getView()。findObject()設置視圖的模型對象時,屏幕上的所有內容都看起來不錯,集合顯示其正確的內容。另一方面,當我嘗試將其保存回去時,在保存操作中,getView()。getEntity()。getCs()集合爲null。 我需要做些什麼才能使視圖與後面的實體相對應?
我正在使用OpenXava 5.0.1,java 1.7 重要說明:我不允許更改OpenXava版本,因爲它是一個傳統項目。
我的編輯(20170126) 我做了一個新的類,以避免引用問題:
@Entity
@Table(name="C")
@View(name = "ViewC", ...)
class D {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private B a;
}
and modified the class B accordingly:
@Entity
@Table(name="A")
@View(name = "ViewB", ...)
class B {
@OneToMany(mappedBy = "a")
@ListProperties(...)
@CollectionView("ViewC")
private Collection<D> cs;//+getter/setters
}
但結果是一樣的:子視圖(收藏ViewC)的記錄裝從數據庫 正確顯示在屏幕上,但如果要編輯Collection ViewC (例如:添加新條目),我會收到一條錯誤消息: 「無法執行保存操作:無法創建:對象該鍵已經存在「 +與之前一樣:在保存操作中,getView()。ge tEntity()。getCs()集合爲null
我在原來的問題中增加了一些補充。在這種情況下,你有任何想法解決方案嗎?先謝謝你! – SzGyD
我仍然認爲你的內容不適合JPA/Hibernate。在沒有OpenXava的情況下測試你的實體,只需要一個帶有main()的類。使用JPA搜索主實體並獲取集合。它工作嗎? – javierpaniza