GWT исключение «Не удается сериализовать» при использовании Hibernate - PullRequest
0 голосов
/ 08 марта 2012

Я получаю "com.google.gwt.user.client.rpc.SerializationException:" при использовании GWT + Hibernate.Я попытался Google, но большая часть ошибки в контексте List (я нашел похожую нить здесь GWT не может сериализовать мой объект из Hibernate ).Я получаю это, когда пытаюсь передать объект типа UserPreference через RPC.Ниже приведены классы для вашей справки.

public class UserPreference implements Serializable {


private static final long serialVersionUID = 1L;
private UserInfo userInfo;

// other attributes

public UserPreference() {
    super();
}
    // getters/setters
}

// UserInfo Class

public class UserInfo implements Serializable{

private int id;
private String name;
private String cuid;    
private UserRole role;
private DbSchema favDb;

public UserInfo() {
    super();
}
}

// DbSchema class

public class DbSchema implements Serializable{

private static final long serialVersionUID = 1L;

private int id;
private String name;
private int port;
private String host;
private String sidName;
private String userName;
private String password;
private String defaultConfigId;

public DbSchema() {
    super();
}

    //getters/setters
}

Я не знаю, чтопроблема с моим классом "DbSchema".Все данные прекрасно извлекаются из БД, и когда я делаю экземпляр DbSchema как «временный» в классе UserInfo, это работает нормально.Я не пробовал с Dozer или Gilead, но просто хочу узнать реальную проблему с кодом.

Спасибо за помощь.

1 Ответ

0 голосов
/ 08 марта 2012

У вас проблема, потому что Hibernate ленивая выборка объектов, на которые ссылаются: когда объект UserInfo создается Hibernate, favDb указывает не на фактический объект DbSchema, а на сгенерированный Hibernate проксиэто на самом деле реализуется через getter / setter, а не само поле).

Общее решение - создать DTO (объект передачи данных).См. Этот пост для объяснения и решения: http://hibernate4gwt.sourceforge.net/hibernate_gwt_lazy_issue.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...