我在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创建支持项目。
答案 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
}