我有 2 张桌子:
电影:movieID
用户:用户ID
这些表通过 Queue 表具有多对多关系,并带有一个附加属性 listOrder:
队列:movieID、userID、listOrder
我正在尝试使用 EclipseLink 对此进行建模,但出现“不兼容的映射”错误。这是我的代码示例:
@Entity
@Table(name="movieinventory")
public class Movie implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer movieID;
@OneToMany(mappedBy="movie")
private Set moviesInQueue;
...Getters/Setters...
}
@Entity
@Table(name="Users")
public class User implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer userID;
@OneToMany(mappedBy="user")
private Set moviesInQueue;
...Getters/Setters...
}
@IdClass(QueueItemPK.class)
@Entity
@Table(name="queue")
public class QueueItem
{
@Id
@ManyToOne
@JoinColumn(name="movieID")
private Movie movie;
@Id
@ManyToOne
@JoinColumn(name="userID")
private User user;
@Basic
private String listOrder;
...Getters/Setters...
}
public class QueueItemPK implements Serializable
{
private static final long serialVersionUID = 1L;
private Movie movie;
private User 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.getMovieID() == movie.getMovieID()
&& pk.user.getUserID() == user.getUserID();
}
}
QueueItemPK 的目的是让我可以拥有movieID 和userID 的复合主键。我不确定这是正确的方法。
这是错误: 异常描述:在 [class Movie] 和 [class QueueItem] 之间遇到不兼容的映射。这通常发生在映射的基数与其反向指针的基数不对应时。我对 User 类有同样的错误(错误交替出现)。
但是,当我从 QueueItem 中的电影和用户变量中取出 @Id 注释并将其他一些键作为主键时,它编译时没有错误。
任何建议,将不胜感激。
谢谢, BJ