首先,正如Mike Cornell所建议的那样,EmbeddedId / Class可能是更易于使用的选择。尽管如此,要回答您的问题和更正的代码:
@IdClass(QueueItemPK.class)@Entity@Table(name="queue")public class QueueItem{ @Id @ManyToOne(optional=false) @PrimaryKeyJoinColumn(name="movieID") private Movie movie; @Id @ManyToOne(optional=false) @PrimaryKeyJoinColumn(name="userID") private User user; @Basic private String listOrder; ...Getters/Setters...}public class QueueItemPK implements Serializable{ private static final long serialVersionUID = 1L; @Id @Column(name="movieID") private Integer movie; @Id @Column(name="userID") private Integer user; ...Getters/Setter... public int hashCode() {return (movie.getMovieID() + "|" + user.getUserID()).hashCode(); } public boolean equals(Object obj) {if (obj == this) return true;if (obj == null) return false;if (!(obj instanceof QueueItemPK)) return false;QueueItemPK pk = (QueueItemPK) obj;return pk.movie == movie && pk.user == user; }}
如您所见,它们必须具有必须匹配的ID的类型。不是很漂亮,但是可以工作。我建议对您的Set使用泛型;使ist更易于阅读,代码更安全。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)