2013-09-25 6 views
1

В моем приложении мои сущности все связаны с одним объектом. Я хотел бы иметь возможность вытаскивать объект, вносить какие-либо изменения в объект (включая его дочерние элементы), а затем сохранять этот объект и каскадировать изменения, но мой базовый тест не работает.GWT RequestFactory - Сохранение изменений в дочерних объектах

Это мой основной объект, который я потянув один экземпляр и изменения:

@Entity 
@Component 
public class Submission extends EntityAbstract implements IsSerializable 
{ 
    ... 
    /** List of statements in this submission. */ 
    @OneToMany(cascade=CascadeType.ALL, mappedBy="parentSubmission") 
    @NotNull 
    @Valid 
    private List<Statement> statements = new LinkedList<Statement>(); 
    ... 

В Statement и Submission классы оба содержат локализованное имя. Это мой тестовый сценарий, когда я тяну Statement сущность я хочу, и попытаться сделать изменения:

... 
// Custom request context method for Submission: 
InstanceRequest< SubmissionProxy, SubmissionProxy > persist(); 
... 

RequestFactory.getTest().get(1L).with(Submission.PropertiesALL).fire(new Receiver<SubmissionProxy>() 
{ 
    @Override 
    public void onSuccess(final SubmissionProxy immutableResponse) 
    { 
    final Test context = RequestFactory.getTest(); 
    final SubmissionProxy submission = context.edit(immutableResponse); 

    System.out.println("received: " + submission.getLocalizedName() + ", " + submission.getStatements().get(0).getLocalizedName()); 

    // Make some modifications: 
    submission.setLocalizedName("submission-" + ((char)(Random.nextInt(26) + 'A'))); 
    submission.getStatements().get(0).setLocalizedName("statementzzz"); 

    System.out.println("persisting: " + submission.getLocalizedName() + ", " + submission.getStatements().get(0).getLocalizedName()); 
    context.persist().using(submission).with(Submission.PropertiesALL).fire(new Receiver<SubmissionProxy>() 
    { 
     @Override 
     public void onSuccess(final SubmissionProxy immutableSubmission) 
     { 
     System.out.println("success: " + submission.getLocalizedName() + ", " + immutableSubmission.getStatements().get(0).getLocalizedName()); 
     } 
    }); 
    } 
}); 

Результаты моих испытаний показывают:

received: submissionzzz, statement-name // Called before making modifications [client] 
persisting: submission-E, statementzzz // Called before persisting changes [client] 
server: submission-E, statement-name  // Called before persisting changes [server] 
success: submission-E, statement-name // Called after persisting changes [client] 

поэтому изменения к первичной сущности, Submission , сохраняются и правильно сериализуются на сервере. Но изменения дочерних свойств, Statement, не сериализуются на сервере, поэтому настойчивость неверна!

EDIT:

Я до сих пор не в состоянии решить эту проблему, так что я создал проблему с GWT: https://code.google.com/p/google-web-toolkit/issues/detail?id=8368&q=requestfactory&colspec=ID%20Type%20Status%20Owner%20Milestone%20Summary%20Stars. Сообщение содержит информацию о сериализованных/десериализованных объектах и ​​включает фактическую полезную нагрузку, отправляемую/получаемую фабричным экземпляром запроса.

Похоже, что полезная нагрузка и сериализация правильны прямо перед тем, как она покидает клиентскую сторону, и как только она будет получена на стороне сервера, данные дочернего элемента отсутствуют.

ответ

1

Я предполагаю, что вы запускали в такой ситуации, как тот, представленный в конце this article

+0

Я просмотрел статью, и я следую рекомендациям, указанным о получении лица, редактирования, применения изменений, и сохраняющиеся , Я не вижу в этой статье какой-либо конкретной информации о взаимоотношениях между родителями и дочерними элементами или графике объектов фабрики запросов. Однако я ценю усилия. –

+0

В конце статьи есть раздел, ** VI) Более сложные ловушки **, посмотрите там ... –

+0

Я должен был прочитать этот раздел ранее, но это не решило проблему. Я попытался вызвать setChild в родительском объекте с обновленным дочерним объектом и редактировать дочерний объект отдельно, но не повезло. –

Смежные вопросы