@OneToMany映射的Hibernate User String字段

时间:2017-02-20 13:15:12

标签: java hibernate jpa

我在Mysql中有2个表,一个是user,另一个是userRoles,两个都是项目中的现有表。当前外键是login_id(varchar)。

我可以在这两个表中创建@ManyToOne映射,我收到错误:

  

getInt()无法解析为'userLoginName'。

TABLES:

用户:

user_id int(11)
login_name varchar(50)
password varchar(50)
status varchar(1)

user_roles:

user_role_id int(11)
login_name varchar(50) #fk
user_role_name varchaar(100)

如果不是任何其他解决方案,有没有办法用String进行映射?由于具有相同数据库的现有项目,我无法更改其数据类型。我正在用Hibernate创建支持项目。

2 个答案:

答案 0 :(得分:3)

我假设你想加入login_name字段。

试试这个:

用户角色实体

@ManyToOne
@JoinColumn(name = "login_name", referencedColumnName = "login_name")
private User user;

用户实体

@OneToMany(mappedBy = "user")
private Set<UserRole> roles;

答案 1 :(得分:2)

@Maciej Kowalski的回答是正确的。

你可以这样做:

@Entity
@Table(name = "USER")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "USER_ID", nullable = false)
    private Long userId;

    @Column(name = "LOGIN_NAME", nullable = false, length = 256)
    private String loginName;

    @Column(name = "PASSWORD", nullable = false, length = 64)
    private char[] password

    @Enumerated(EnumType.STRING)
    @Column(name = "STATUS", nullable = false)
    private Status status = Status.ACTIVE;

    @ManyToMany(targetEntity = UserRole.class)
    @JoinTable(name = "USER_ROLE_MAPS", joinColumns = {@JoinColumn(name = "LOGIN_NAME")}, inverseJoinColumns = {
            @JoinColumn(name = "ROLE_ID")})
    private Set<UserRole> userRoles;
    //... getter and setter
}



@Entity
@Table(name = "USER_ROLE", uniqueConstraints = {@javax.persistence.UniqueConstraint(columnNames = {"USER_ROLE_NAME"})})
public class UserRole {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ROLE_ID", nullable = false)
    private Long roleId;

    @Column(name = "USER_ROLE_NAME", nullable = false)
    private String roleName;

    //... getter and setter
}