2016-04-09 220 views
0

我有兩個簡單的表:Users和User_Roles。 在兩個表我有一個字段email,我想從UserEntity負載User_Roles,查詢應該是:JPA-實體映射中的重複列@OneToOne

SELECT * 
    FROM Users u, User_Roles ur 
WHERE u.email = ur.email; 

當我嘗試「聯繫」電子郵件字段我得到的錯誤「中映射重複列實體:用戶實體欄:電子郵件「。

我已經嘗試添加任何種類的組合(的mappedBy,refColumn等),但錯誤的是即使是同一...

用戶

@Entity 
@Table(name = "users") 
public class UserEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private long id; 
    private String email; 
    private UserRolesEntity roles; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 

    @Basic 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 

    @OneToOne 
    @JoinColumn(name = "email") 
    public UserRolesEntity getRoles() { 
     return roles; 
    } 
    public void setRoles(UserRolesEntity roles) { 
     this.roles = roles; 
    } 
} 

User_Roles

@Entity 
@Table(name = "user_roles") 
public class UserRolesEntity { 

    private long id; 
    private String email; 
    private String role; 

    @Id 
    @Column(name = "user_role_id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    @Basic 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 

    @Basic 
    public String getRole() { 
     return role; 
    } 
    public void setRole(String role) { 
     this.role = role; 
    } 
} 
+0

你有一個1-1的關係,所以NE在UserRolesEntity類中編輯FK。您不能將STRING字段用作ForeignKey,以指定具有LONG類型標識的內容 –

+0

我懷疑這樣的事情....我沒有使用FK註釋之前......你能告訴我我將如何修改UserRolesEntity?接下來,我會研究你的未來解決方案...非常感謝... – Mistre83

+0

修改?您從其他課程中刪除@JoinColumn(name =「email」)。 1-1關係在任何JPA文檔 –

回答

0

如果你想鏈接User_Roles和User,你應該保持User_Roles中的用戶主鍵。所以,你會更好地修改您的User_Roles表是這樣的:

long user_role_id 
long user 
String role 

然後你User_Roles類將是:

@Entity 
@Table(name = "user_roles") 
public class UserRolesEntity { 

private long id; 
private User user; 
private String role; 

@Id 
@Column(name = "user_role_id") 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
public long getId() { 
    return id; 
} 

public void setId(long id) { 
    this.id = id; 
} 

@OneToOne 
public User getUser() { 
    return user; 
} 
public void setUser(String user) { 
    this.user = user; 
} 

@Basic 
public String getRole() { 
    return role; 
} 
public void setRole(String role) { 
    this.role = role; 
} 
} 

如果你想擺脫user_role的用戶的電子郵件,你可以這樣做:userRole.getUser().getEmail()

,然後將用戶類將是:

@Entity 
@Table(name = "users") 
public class UserEntity implements Serializable { 

private static final long serialVersionUID = 1L; 

private long id; 
private String email; 
private UserRolesEntity roles; 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
public long getId() { 
    return id; 
} 
public void setId(long id) { 
    this.id = id; 
} 

@Basic 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 

@OneToOne(mappedBy="user") 
public UserRolesEntity getRoles() { 
    return roles; 
} 
public void setRoles(UserRolesEntity roles) { 
    this.roles = roles; 
} 
} 
相關問題