如下面這個定義,一個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);
};
@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了。