GWT ›2.4 RequestFactory не сохраняет изменения дочернего объекта

У меня есть проект, который некоторое время работал на GWT 2.4 (а до этого - на 2.0 и т. Д.). Когда я переключаю его на GWT 2.5 или 2.6, дочерние объекты, прикрепленные к моей основной сущности, больше не сохраняют внесенные в них изменения. Я не меняю никакого кода, но при переходе с 2.4 на 2.6 он ломается. Я считаю, что изменения не отправляются на сервер. Я смотрю данные POST, и они кажутся неполными, в них отсутствуют изменения, которые, как я вижу, отправляются в версии 2.4.

Есть ли изменения в RequestFactory с 2.4-2.5, которые могут вызвать это? Что-то в том, как я это построил, не было правильным дизайном? Я ценю любые отзывы!

Вот образец шаблона получения / обновления:

// Retrieve object from server
MyEntityRequest request = App.getRequestFactory().myEntityRequest();
MyEntityProxy myEntity;
request.get(id).with("child").fire(new Receiver<MyEntityProxy>() {
  @Override
  public void onSuccess(MyEntityProxy response) {
    request = App.getRequestFactory().myEntityRequest();
    myEntity = response;
  }
});

// Edits made client side..

// Save updated object
myEntity = request.edit(myEntity);
myEntity.childEntity.setName("new value");
request.save(myEntity).fire(new Receiver<MyEntityProxy>() {
  @Override
  public void onSuccess(Void) { }
});

Пример интерфейса запроса:

@Service(value = MyEntityDao.class, locator = DaoLocator.class)
public interface MyEntityRequest extends RequestContext {
  Request<Void> save(MyEntityProxy entity);
}

Объекты домена:

@ProxyFor(MyEntity.class, locator=DomainObjectLocator.class)
public interface MyEntityProxy extends EntityProxy {
  Integer getId();
  Set<ChildProxy> getChildren();
  void setChildren(Set<ChildProxy> children);
}

@ProxyFor(Child.class, locator=DomainObjectLocator.class)
public interface ChildProxy extends EntityProxy {
  Integer getId();
  String getName();
  void setName(String name);
}

Объект сервера:

@Entity
@Table (name="MyEntity")
@BatchSize(size=25)
public class MyEntity extends DomainObject {
  @OneToMany (mappedBy = "myEntity")
  @BatchSize(size=25)
  @Cascade(CascadeType.ALL)
  private Set<Child> children;
}

Сервер сохраняется:

public static Void save(MyEntity myEntity) {

  Session session = HibernateUtil.getSessionFactory().getCurrentSession();
  session.beginTransaction();

  try {
    myEntity = (MyEntity) session.merge(myEntity);
  } catch (Exception e) {
    e.printStackTrace();
    session.getTransaction().rollback();
  } finally {
    session.getTransaction().commit();
  } 
}

person CyDharttha    schedule 04.06.2014    source источник


Ответы (1)


Вероятно, это как-то связано с https://code.google.com/p/google-web-toolkit/issues/detail?id=7827

TL; DR: да, в 2.5 были некоторые изменения.

person Thomas Broyer    schedule 04.06.2014
comment
Большое спасибо за ответ, Томас (еще раз!); Я буду работать над правильной реализацией OSIV (мне нужно кое-что почитать / научиться). - person CyDharttha; 04.06.2014
comment
Я наконец завершил это и смог перейти на GWT 2.7 в приложении. stackoverflow.com/questions/32791101/ имеет некоторые подробности о моих обновлениях. - person CyDharttha; 01.10.2015