내가하려는 것은 사용자 ID를 기반으로 테이블을 다른 테이블에 조인하는 것입니다.Play Framework Join Table
사용자 테이블과 사용자 ID와 연결된 외래 키가있는 경고 내역 테이블이 있습니다.
Netbeans 7.4에서 생성 된 항목을 사용하고 있습니다.
사용자 :
@Entity
@Table(name = "Users", schema = "dbo")
public class User extends Model implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "UserID")
private Integer userID;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "userId")
private Collection<AlertHistory> alertHistoryCollection;
{ ... }
경고 기록 :
@Entity
@Table(name = "Alert_History", schema = "dbo")
public class AlertHistory extends Model implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Long id;
@Basic(optional = false)
@Column(name = "user_id")
@ManyToOne(fetch = FetchType.EAGER)
private int userId;
@Basic(optional = false)
@Column(name = "message_id")
private long messageId;
@Basic(optional = false)
@Lob
@Column(name = "alerts_triggered")
private String alertsTriggered;
{...}
내가 기대하는 것은 내가 사용자를로드 할 때, 그것은 사용자 ID를 기반으로 AlertsHistory
테이블 결과에 가입하려고 할 것입니다. 나는이 길을 잘못보고 있었다
이 해결 그러나, 런타임시 AlertsHistory
컬렉션은 항상 null
업데이트입니다. JOIN을 수행하기 위해 AlertHistory는 userId 키가 아닌 User 객체를 넘겨 줄 것을 기대하고있었습니다. User
필드를 모델에 추가하고 @OneToMany(mappedBy = "userId")
을 @OneToMany(mappedBy = "user"
으로 변경 한 다음 User
필드에 @JoinColumn(name="user_id", referencedColumnName="userId") private User user;
을 추가하면 AlertHistory
필드가 나옵니다. 모두 도움을 주셔서 감사합니다. 한 가지 들어
해야 atributte "개인 없습니다 int userId "는 AlertHistory에서"private User userId "가됩니까? – edubriguenti
감사합니다 @ didubriguenti, 그건 관 속에 못을 박았다! 나는이 모든 것을 잘못보고 있었다. 실제로 전체 객체를 참조 할 필요가있을 때 키 (userId)를 전달해야한다고 생각했습니다. JPA가 일치시킬 열로 추측했기 때문에 (즉, 존재하지 않는 user_userId라는 열을 찾고 있었기 때문에) 다른 문제가 발생했습니다. 해결책은 AlertHistory에 다음을 추가하는 것입니다 : @JoinColumn (name = "user_id", referencedColumnName = "userId") 개인 사용자 사용자, ' –