2016-04-09 218 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; 
} 
} 
相关问题