我在从数据库填充详细视图时遇到问题。
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() 集合为空。我该怎么做才能使视图与背后的实体相对应?
我正在使用 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)的记录是从数据库中加载的,并正确显示在屏幕上,但是如果我想编辑集合 ViewC(例如:添加一个新条目),我会收到一条错误消息):“无法执行保存操作:无法创建:具有该键的对象已存在” + 与以前一样:在保存操作中,getView().getEntity().getCs() 集合为空