java - hibernate "repeated column in mapping for entity"错误

标签 java hibernate jpa

我有两个类想要通过 Hibernate 集成:

  1. 目标类别,其中包含用户的目标。它由“DIC_GOAL”表支持。
  2. 角色类,包含用户的访问权限。它由“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/

相关文章:

Java JOptionPane 对话框 NullPointerException

java - BeanDefinitionParsingException : Unable to locate Spring NamespaceHandler for XML schema namespace [http://java. sun.com/xml/ns/javaee]

Spring Boot Hibernate 无法反序列化 : invalid stream header: 3433302E

java - `Object` 方法 : `toString` ,、 `equals` 和 `hashCode` 中延迟加载的实体

jpa - 如何在 JOIN 中使用 JPA Criteria API

java - 验证通过,但是当调用 merge() 时,会抛出验证错误

java - 从 Jar 加载 ZUL

java - 安卓 : getting data from cursor

java - JPA 继承 entitymanager.find 产生 ClassCastException

java - 如何使用 Hibernate、HikariCP 和 persistence.xml 实现 Spring 的 @Transactional Annotation