我不确定在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在UnitOfMeasureExperiment之间正常的单向1:n分配。
我有数量有限的不同UnitOfMeasure实例,这些实例通常不会改变。

Web应用程序提供了一个视图,用户可以在其中更改Experiment实例的某些属性。该视图使用Editor framework。为了更改特定UnitOfMeasureExperiment,我使用ValueListBox并呈现unit_type属性。

因为可用的UnitOfMeasure实例列表是静态的,所以我使用AutoBeanFactory创建一个json字符串,并将其放入HTML主机页面,并在应用程序启动期间解析它(对于所有其他集合(如表值)都是相同的)并存储它们在Singleton类实例(AppData)中,我将其传递给setAcceptableValues。

目前,我是从UnitOfMeasureProxy派生EntityProxy的,但是为了使用AutoBeanFactory对其进行解码/编码,我必须使用EntityProxyCategory注释工厂。我以某种方式怀疑是更好的选择。
但是,对于ValueProxy,当我更改特定ValueProxyUnitOfMeasure时,整个Experiment实例将通过电线传输。
但是从数据库角度来看,只需要更改ValueProxy表中外键的值即可。

那么分别收集表和子值的最佳实践(ExperimentValueProxy)是什么?

最佳答案

在许多情况下,对其他实体的引用最好使用其ID而不是EntityProxy本身来建模(这值得商,,但我认为对于服务器端代码或实际上任何跨越工作单元边界的代码也是如此) – JPA EntityManager的生存期,休眠会话等–)

顺便说一句,序列化RequestFactory代理的正确方法是使用ProxySerializer
如果您有ValueProxy列表,请确保使用GWT 2.5.0-rc1(请参阅issue 6961

10-04 18:08