У меня есть два класса, которые я хочу интегрировать через Hibernate:
- Класс цели , который содержит цели пользователя. Он поддерживается таблицей "DIC_GOAL".
- Роль класса , который содержит доступ пользователя. Он опирается на таблицу "ROLES"
В моей структуре базы данных у меня есть таблица "Цель" с полем "ROLE_ID" . Это поле указывает на таблицу ролей Первичный ключ "ID" . Итак, каждая строка (сущность) в таблице целей сопоставляется со строкой (сущностью) роли по одному.
Итак, я хочу присоединиться Класс роли к Класс цели чтобы иметь возможность представлять расширенное Rolename для каждой цели, которая помещается в класс роли . Я использую приведенный ниже код, чтобы сделать это в Hibernate (в классе цели):
@OneToOne
@JoinColumn (name="role_id")
Role role;
И получаю ошибку: Повторный столбец в сопоставлении для сущности: com.platform.entity.Goal column: role_id ( должно быть сопоставлено с помощью insert = "false" update = "false") Пожалуйста, помогите мне исследовать эту ошибку?
Таблица ROLES
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();
}
}