2013-09-29 3 views
1

У меня есть 2 сериализуемых с нулевым конструкторами лицами, с @OneToMany соотношения (если я использовать только один объект без списка @OneToMany, все правильно работать):GWT RPC SerializationException при использовании Списка лиц @OneToMany

@Entity 
@Table(name = "directory") 
public class Directory implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private String documentName; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<DirectoryValues> dirValues; 

    public Directory() {} 
    ... 
    getters and setters 
    } 


@Entity 
@Table(name = "directoryvalues") 
public class DirectoryValues implements Serializable{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String value; 

    public DirectoryValues() {} 
    ... 
    getters and setters 

}

проблема возникает, когда я добавить @OneToMany аннотации:

СИЛЬНОЕ: Исключение при диспетчеризации, приходящий на RPC вызова, com.google.gwt.user.client.rpc.SerializationException: Тип «org.hibernate.collection .Persiste ntBag 'не был включен в набор типов, которые могут быть сериализованы с помощью этого объекта SerializationPolicy или его объекта класса, не могут быть загружены. В целях безопасности этот тип не будет сериализован .: instance = [] на com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize (ServerSerializationStreamWriter.java:619)

Что не так с моим Список в сущности?

+0

Я считаю, что когда у вас есть сопоставление «один ко многим», вы должны использовать 'Set '. Можете ли вы попробовать это? – Churro

ответ

2

Вы должны использовать объекты передачи данных (DTO), читать: http://www.gwtproject.org/articles/using_gwt_with_hibernate.html и особенно «Почему объекты Hibernate не могут быть поняты, когда они достигают части браузера». Или используйте RequestFactory (http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html) вместо GWT-RPC.

0

Как подразумевается, в GWT и Hibernate возникают проблемы, возникающие в процессе работы. Это хорошо документировано, и вы можете прочитать о некоторых альтернативах в ссылках, которые он отправил. Вы можете либо избежать GWT-RPC, избежать Hibernate, либо работать немного сложнее, чтобы сделать их совместимыми.

У меня есть проект, в котором GWT и Hibernate используются вместе; Я использую объекты передачи данных, и я переводил и обновлял домен и DTO, используя Moo. Иногда это немного больно, но я частично создал Moo, чтобы облегчить эту работу. Существуют и другие аналогичные структуры, которые вы можете использовать (например, Dozer и т. Д.).

В конечном счете, решение о том, как лучше всего это решить, - это то, что вам нужно для разработки собственного проекта.

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