随笔-124  评论-194  文章-0  trackbacks-0
当ManyToMany或者ManyToOne定义时,JoinTable中referencedColumnName指向的是非主键(non PK columns),将 报ClassCastException。这里有个简单解决办法。

如下面这个定义,一个HOSTGROUP可以包含多个HOST,而一个HOST也可以属于多个HOSTGROUP,hostgroup_id是HOSTGROUP表的主键,但是host_object_id不是HOST表的主键,却也可以唯一标识HOST,这个时候就会出现上述异常。

@Entity
@Table(name 
= "hostgroups")
public class CurHostGroup {

    @ManyToMany(fetch 
= FetchType.LAZY)
    @JoinTable(name 
= "hostgroup_members", joinColumns = @JoinColumn(name = "hostgroup_id", referencedColumnName = "hostgroup_id"), inverseJoinColumns = @JoinColumn(name = "host_object_id", referencedColumnName = "host_object_id"))
    
private Set<CurHost> hosts = new HashSet<CurHost>(0);
};

有个非常简单的解决办法,让HOST表关联的类CurHost implements Serializable即可,要是不知道这个,能憋死人。当然这样做,CurHost就不是POJO了。
posted on 2008-10-27 17:30 我爱佳娃 阅读(3999) 评论(1)  编辑  收藏 所属分类: DB相关Hibernate

评论:
# re: ManyToMany关系中,使用非主键联合的方法 2013-08-25 11:14 | miketho
怎么没有映射表呢,我不太会看注解的方式呀!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: