를 사용하여 접합 표와의 관계 내가 2 개 테이블이 설정합니까어떻게 당신은이 대다 JPA /는 EclipseLink
큐 : movieID, userI 추가 속성 listOrder와, 큐 테이블을 통해 다수의 관계에 많은 D, 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와 사용자 ID의 복합 차 키를 가질 수 있도록입니다 : 여기에 내 코드의 샘플입니다. 나는 이것이 올바른 방법이라는 것을 절대적으로 확신하지 못합니다. . 예외 설명 :
이
는 오류가 호환되지 않는 매핑이 [클래스 영화] 및 [클래스 QueueItem] 사이에 발생했습니다. 대개 매핑의 카디널리티가 백 포인터의 카디널리티와 일치하지 않을 때 발생합니다. User 클래스에서 동일한 오류가 발생했습니다 (오류가 번갈아 나타남).QueueItem의 영화 및 사용자 변수에서 @Id 주석을 제거하고 기본 키를 다른 키로 만들면 오류없이 컴파일됩니다.
의견을 보내 주시면 감사하겠습니다. 마이크 코넬에 의해 제안
감사합니다, 모두의 비제이
QueueItemPK를 @Embeddable로 표시하고 @Id로 삽입하는 대신 @IdClass를 사용하게 된 이유는 무엇입니까? –