当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