我正试图抓住新的RequestFactory API,并度过了非常艰难的时期。
我的域模型包含Staffer
,Person
和Office
。员工有一个人和一个办公室作为领域。
当我尝试将更新保存到GWT中的Staffer实例时,在服务器端persist()
调用中,我在其原始/字符串字段中看到更新,但是我没有看到附加{{1 }或Person
个对象。以下是我如何影响GWT方面的编辑:
Office
以下是代理:
private void persistStafferDetails()
{
CRMRequestFactory.StafferRequest stafferRequest = requestFactory.stafferRequest();
staffer = stafferRequest.edit(staffer);
PersonProxy person = staffer.getPerson();
person.setFirstName(firstNameField.getText());
person.setLastName(lastNameField.getText());
staffer.setPersonalEmail(personalEmailField.getText());
staffer.getHomeLocation().setStreetAddress(addressField1.getText());
staffer.getHomeLocation().setCity(cityField.getText());
staffer.getHomeLocation().setPostalCode(postalField.getText());
staffer.getHomeLocation().setProvince(provinceDropDown.getValue(provinceDropDown.getSelectedIndex()));
stafferRequest.persist().using(staffer).fire();
}
我的CRMRequestFactory看起来像:
@ProxyFor(Staffer.class)
public interface StafferProxy extends EntityProxy
{
Long getId();
PersonProxy getPerson();
void setPerson(PersonProxy person);
OfficeProxy getOffice();
void setOffice(OfficeProxy office);
String getHomePhone();
void setHomePhone(String homePhone);
String getCellPhone();
void setCellPhone(String cellPhone);
String getPersonalEmail();
void setPersonalEmail(String personalEmail);
LocationProxy getHomeLocation();
void setHomeLocation(LocationProxy homeLocation);
}
@ProxyFor(Person.class)
public interface PersonProxy extends EntityProxy
{
Long getId();
void setId(Long id);
String getFirstName();
void setFirstName(String firstName);
String getLastName();
void setLastName(String lastName);
}
@ProxyFor(Office.class)
public interface OfficeProxy extends EntityProxy
{
Long getId();
String getName();
void setName(String name);
}
答案 0 :(得分:3)
RequestFactory不会将persist()
方法视为特殊内容,因此您必须自己实现链式持久性,或者配置ORM系统为您执行此操作。要检查的另一件事是,如果多次调用,findPerson()
和findOffice()
方法将返回Person或Office对象的同一对象实例。如果在传入的HTTP请求的整个生命周期中使用相同的EntityManager
(或系统的等效项),那通常会处理非平凡有效负载图的“缺失更新”问题。
blog post关于链式持久性和问题tracker link,并进行简短讨论。
如果这没有帮助,您是否可以发布域对象的findFoo()
和persist()
方法示例?