用于集合/查找表的GWT RequestFactory,ValueProxy或EntityProxy

时间:2012-08-23 13:16:53

标签: java gwt requestfactory

我不确定在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-app提供了一个视图,用户可以在其中更改Experiment实例的某些属性。该视图使用Editor framework。要更改特定UnitOfMeasure的{​​{1}},请使用Experiment并呈现ValueListBox属性。

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

目前我从AppData派生UnitOfMeasureProxy,但为了使用EntityProxy对其进行解码/编码,我必须使用AutoBeanFactory注释工厂。我不知何故怀疑EntityProxyCategory更适合。{ 但是,当我更改特定ValueProxy的{​​{1}}时,ValueProxy通过网络传输整个UnitOfMeasure实例。
但是,从数据库的角度来看,只需要更改Experiment表中外键的值。

那么对于像表和子值这样的集合,最佳做法(ValueProxy vs Experiment)是什么?

1 个答案:

答案 0 :(得分:1)

在许多情况下,对其他实体的引用最好使用它们的ID而不是EntityProxy本身建模(这是有争议的,但我认为对于服务器端代码也是如此,或者实际上任何跨越单位的代码工作边界-JPA EntityManager生命周期,Hibernate会话等.-)

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

,请确保使用GWT 2.5.0-rc1