#exception #gwt #version #requestfactory
#исключение #gwt #версия #requestfactory
Вопрос:
В настоящее время я разрабатываю приложение с использованием GWT / RequestFactory и Hibernate / JPA в качестве поставщика ресурсов для сохранения.
Итак, я начал изменять свои классы сущностей, создал EntityProxies, поместил столбец версии с соответствующим отображением в orm.xml (извините за поклонников аннотаций, я все еще делаю это по-старому), получил hibernate правильно генерирует схему базы данных, но когда я пытаюсь что-то сделать в нем, у меня возникает исключение :
@ProxyFor(XXXXX)
public interface UserProxy extends EntityProxy {
public Long getId();
public void setId(Long id);
public Integer getVersion();
public void setVersion(Integer version);
// removed ...
}
"The persisted entity with id XXX has a null version"
Я просматриваю таблицу базы данных, столбец version там есть … со значением
итак, кто-нибудь может сказать мне, что не так? Будем признательны за любую помощь…
большое спасибо,
Ответ №1:
Установите точку останова в, SimpleRequestProcessor.createReturnOperations()
где domainVersion != null
выполняется проверка. Является ли объект, у которого нет версии, вновь созданным методами сервиса, или это тот, с которым работал клиент? Если он недавно создан, выполняется ли у вас какая-либо автоматическая фиксация в области запроса, где версия будет назначена после завершения запроса? Если это объект, который был изменен клиентом, посмотрите, поможет ли удаление методов setId()
и setVersion()
. В общем, ваш EntityProxy
интерфейс не должен включать методы setId()
и setVersion()
, поскольку эти свойства должны устанавливаться только вашим механизмом сохранения.
Комментарии:
1. Я установил точку останова и, наконец, обнаружил, что объект, который я ожидал от domainVersion = service.GetVersion(DomainObject);, не был тем, который я получил… У меня есть иерархия наследования с объектами моего домена, поэтому я заставил ее работать. Я также последовал вашему предложению о том, чтобы не раскрывать методы setId () и setVersion () … спасибо за подсказки! вы, кажется, очень хорошо знаете внутренности GWT, как вы обнаружили, что именно в этот момент мне пришлось установить точку останова в SimpleRequestProcessor ? это потрясающе… еще раз большое спасибо…
Ответ №2:
Если вы используете класс Locator, другой причиной может быть метод Locator GetVersion (), возвращающий null вместо, например, возврата версии объекта. Eclipse по умолчанию генерирует возвращаемое значение null.