我不确定在RequestFactory
中处理集合/查找表的最佳实践是什么。
例如,如果我有以下两个Domain对象:
@Entity
public class Experiment {
private Long id;
private String name;
@ManyToOne(cascade={CascadeType.PERSIST,CascadeType.MERGE})
private UnitOfMeasure unitOfMeasure;
public Experiment() { }
public String getName() {
return name;
}
public Long getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public UnitOfMeasure getUnitOfMeasure() {
return unitOfMeasure;
}
public void setUnitOfMeasure(UnitOfMeasure unitOfMeasure) {
this.unitOfMeasure = unitOfMeasure;
}
}
@Entity
public class UnitOfMeasure {
private Long id;
private String unit_type;
public UnitOfMeasure() { }
public String getUnitType() {
return unit_type;
}
public Long getId() {
return id;
}
public void setUnitType(String unitType) {
this.unit_type = unitType;
}
}
这是使用
Experiment
表中的ForeignKey在UnitOfMeasure
和Experiment
之间正常的单向1:n分配。我有数量有限的不同
UnitOfMeasure
实例,这些实例通常不会改变。Web应用程序提供了一个视图,用户可以在其中更改
Experiment
实例的某些属性。该视图使用Editor framework
。为了更改特定UnitOfMeasure
的Experiment
,我使用ValueListBox
并呈现unit_type
属性。因为可用的
UnitOfMeasure
实例列表是静态的,所以我使用AutoBeanFactory
创建一个json字符串,并将其放入HTML主机页面,并在应用程序启动期间解析它(对于所有其他集合(如表值)都是相同的)并存储它们在Singleton类实例(AppData
)中,我将其传递给setAcceptableValues。目前,我是从
UnitOfMeasureProxy
派生EntityProxy
的,但是为了使用AutoBeanFactory
对其进行解码/编码,我必须使用EntityProxyCategory
注释工厂。我以某种方式怀疑是更好的选择。但是,对于
ValueProxy
,当我更改特定ValueProxy
的UnitOfMeasure
时,整个Experiment
实例将通过电线传输。但是从数据库角度来看,只需要更改
ValueProxy
表中外键的值即可。那么分别收集表和子值的最佳实践(
Experiment
与ValueProxy
)是什么? 最佳答案
在许多情况下,对其他实体的引用最好使用其ID而不是EntityProxy
本身来建模(这值得商,,但我认为对于服务器端代码或实际上任何跨越工作单元边界的代码也是如此) – JPA EntityManager的生存期,休眠会话等–)
顺便说一句,序列化RequestFactory代理的正确方法是使用ProxySerializer。
如果您有ValueProxy
列表,请确保使用GWT 2.5.0-rc1(请参阅issue 6961)