首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hibernate PersistentenSet未包含在类型集中

问hibernate PersistentenSet未包含在类型集中
EN

Stack Overflow用户
提问于 2012-05-09 04:51:21
回答 1查看 2K关注 0票数 1

我有3个类,推荐,判断,用户,关系是:一个推荐可能有多个判断,一个用户可能有多个判断(对不同的推荐),下面是我的JPA类:

类推荐

代码语言:javascript
复制
@Entity
@Table(name = "RECOMMENDATIONS")
public class Recommendation implements Serializable, Cloneable {
...

@OneToMany(cascade = {CascadeType.REFRESH, CascadeType.DETACH }, fetch = FetchType.EAGER, mappedBy="recommendation", targetEntity=Judgement.class)
private Set<Judgement> judgements;

    ...
    public Recommendation() {
        super();
        this.judgements = new LinkedHashSet<Judgement>();
    }
   ...
}

类User:

代码语言:javascript
复制
@Table(name = "USERS", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User implements Serializable, Cloneable {
...
    @OneToMany(mappedBy="judge", targetEntity=Judgement.class, cascade = { CascadeType.REFRESH, CascadeType.DETACH }, fetch = FetchType.EAGER)
    private Set<Judgement> judgements;
...
    public User() {
        super();
        this.judgements = new LinkedHashSet<Judgement>();
    }

...
}

类判断:

代码语言:javascript
复制
@Entity
@Table(name = "JUDGEMENTS")
public class Judgement implements Serializable, Cloneable {
    @ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH})
    @JoinColumn(name = "id")
    private Recommendation recommendation;

    @ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.DETACH})
    @JoinColumn(name = "user_id")
    private User judge;
...
    public Judgement() {
        super();
    }
...
}

在db中,我有以下表格:用户推荐;判断;

我在users中有一些数据,在recommendations中有一些数据,但在判断表中是空的,当我加载我的应用程序时得到以下异常:

代码语言:javascript
复制
com.google.gwt.user.client.rpc.SerializationException: Type 'org.hibernate.collection.PersistentSet' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = []

我调试了加载推荐记录的判断字段时生成的代码,它不能实例化它。请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-09 15:48:01

包含由hibernate加载的数据库实体的对象是不可序列化的。因此,它们不能用作gwt远程过程调用的传输对象。

最简单的解决方案是将实体实例(在您的示例中是建议、判断和用户实例)中的所有内容复制到简单的数据持有者对象中,并将持有者对象用作远程过程调用中的参数。对于小型项目来说,这是一个很好的解决方案。对于更大的项目,您可以考虑使用Gilead库;在这种情况下,您甚至可以从延迟加载中获益。

谷歌提供了将hibernate集成到GWT中的a good documentation。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10506303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档