ManyToMany关系中,使用非主键联合的方法

ManyToMany关系中,使用非主键联合的方法
当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了。


有兴趣可以访问下我的生活博客: qqmovie.qzone.com

你可能感兴趣的:(ManyToMany关系中,使用非主键联合的方法)