我有两个类想要通过 Hibernate 集成:
- 目标类别,其中包含用户的目标。它由“DIC_GOAL”表支持。
- 角色类,包含用户的访问权限。它由“ROLES”表支持
在我的数据库结构中,我有表“Goal”,其中包含字段“ROLE_ID”。该字段指向角色的表主键“ID”。因此,Goal 表中的每一行(实体)一一映射到 Role 的行(实体)。
因此,我想将角色类加入目标类,以便能够表示每个目标的扩展角色名称,该角色名称放置在角色类中嗯>。 我使用下面的代码在 Hibernate 中执行此操作(在 Goal 类中):
@OneToOne
@JoinColumn (name="role_id")
Role role;
并出现错误: 实体映射中的重复列:com.platform.entity.Goal 列:role_id(应使用 insert="false"update="false"进行映射) 请帮我调查这个错误?
角色表
create table MAPP.ROLES
(
id INTEGER generated always as identity,
rolename VARCHAR2(255),
descr VARCHAR2(255)
)
目标表
create table MAPP.DIC_GOAL
(
id INTEGER generated always as identity,
descr NVARCHAR2(255),
role_id INTEGER not null,
vl NUMBER
)
目标类别
package com.platform.entity;
@Entity
@Table(name="dic_goal", schema="MAPP")
public class Goal {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "DESCR", length = 255, nullable = false)
public String descr;
@Column(name = "ROLE_ID", nullable = false)
public int role_id;
// Here it is!
@OneToOne
@JoinColumn (name="role_id")
Role role;
@Column(name = "VL")
private float vl;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescr() {
return descr;
}
public void setDescr(String descr) {
this.descr= descr;
}
public float getVl() {
return vl;
}
public void setVl(float vl) {
this.vl = vl;
}
@Override
public String toString() {
return "ID=" + id + " DESCR=" + descr + " VL=" + vl;
}
}
角色类别
package com.platform.entity;
@Entity
@Table(name="roles", schema="MAPP")
public class Role implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Long id;
@Column(name = "ROLENAME", length = 255, nullable = false)
@Size(min=5, message="Не меньше 5 знаков")
private String roleName;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="user_roles", schema="MAPP",
joinColumns = @JoinColumn(name="role_id"),
inverseJoinColumns = @JoinColumn(name="user_id")
)
private Set<User> users;
public String getName() {
return roleName;
}
public void setName(String name) {
this.roleName = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public String getAuthority() {
return getName();
}
@Override
public String toString() {
return this.getName();
}
}
最佳答案
正如 Nikos Paraskevopoulos 正确提到的:原因很简单:您将 role_id 列映射到 2 个不同的属性,即 Role role 和 int role_id 因此,我删除了 int role_id 并将其替换为链接的 Role 对象。
关于java - hibernate "repeated column in mapping for entity"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60620657/