无法找到具有逻辑名称的列 [英] Unable to find column with logical name

查看:873
本文介绍了无法找到具有逻辑名称的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有5个表格,每个表格与下一个表格有一对多的关系

Project_t - > project_level1_t - > project_level2_t - > project_level3_t - > project_level4_t

我想用户休眠使用这些表格

  CREATE TABLE project_t 

projectid serial NOT NULL,
address1 character (128),
邮编字符变化(7),
城市字符变化(64),
level_four_name字符变化(128),
CONSTRAINT project_t_pkey PRIMARY KEY(投影),
CONSTRAINT projectcode_unique UNIQUE(projectcode)

和project_level1_t

  CREATE TABLE project_level1_t 

projectlevel1id integer NOT NULL DEFAULT nextval('project_level1_t_projectlevel1pk_seq':: regclass),
级别名称字符变化(256),
项目整数,
CONSTRAINT project_level1_t_pkey PRIMARY KEY(projectlevel1id),
CONSTRAINT项目t_level1_t_project_t_fkey FOREIGN KEY(projectid)
REFERENCES project_t(projectid)MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

和project_level2_t

  CREATE TABLE project_level2_t 

projectlevel2id integer NOT NULL DEFAULT nextval('project_level2_t_projectlevel2_seq':: regclass),
levelname character varying(256),
projectlevel1id integer,
CONSTRAINT project_level2_t_pkey PRIMARY KEY(projectlevel2id),
CONSTRAINT project_level2_t_projec_level_1_fkey FOREIGN KEY(projectlevel1id)
REFERENCES project_level1_t(projectlevel1id)MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

这是Repository文件

  package ma.eurnet.mp.tables.model; 

import javax.persistence.GenerationType;

@JsonAutoDetect
@Entity
@Table(name =project_t)
public class ProjectRepository实现Serializable {

private static final long serialVersionUID = 1L;

ProjectRepository(){
}

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = projectid)
private long projectId;

@OneToMany(fetch = FetchType.EAGER,mappedBy =project)
@JsonIgnore
private List< ProjectLevel1Repository> projectlevel1 = new ArrayList< ProjectLevel1Repository>();

public Long getProjectId(){
return projectId;
}

public void setProjectId(Long projectId){
this.projectId = projectId;
}

public List< ProjectLevel1Repository> getProjectlevel1(){
return projectlevel1;
}

public void setProjectlevel1(List< ProjectLevel1Repository> projectlevel1){
this.projectlevel1 = projectlevel1;
}

  package ma.eurnet.mp.tables.model; 

@JsonAutoDetect
@Entity
@SequenceGenerator(name =projectLevel1Sequence,sequenceName =project_level1_t_projectlevel1pk_seq,allocationSize = 1)
@Table(name =project_level1_t )
public class ProjectLevel1Repository实现Serializable {

private static final long serialVersionUID = 1L;
$ b $ public ProjectLevel1Repository(){
}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator =projectLevel1Sequence)
@Column(name =projectlevel1id)
private long projectLevel1Id;

@ManyToOne
@JoinColumn(name =projectid,referencedColumnName =projectid)
@JsonIgnore
私人ProjectRepository项目;

@OneToMany(fetch = FetchType.EAGER,mappedBy =projectlevel1id)
@JsonIgnore
private List< ProjectLevel2Repository> projectlevel2 = new ArrayList< ProjectLevel2Repository>();

公共列表< ProjectLevel2Repository> getProjectlevel2(){
return projectlevel2;
}

public Long getProjectLevel1Id(){
return projectLevel1Id;
}


public void setProjectLevel1Id(Long projectLevel1Id){
this.projectLevel1Id = projectLevel1Id;
}


public ProjectRepository getProject(){
return project;
}


public void setProject(ProjectRepository project){
this.project = project;
}




}



  package ma.eurnet.mp.tables.model; 

import java.io.Serializable;


@JsonAutoDetect
@Entity
@SequenceGenerator(name =projectLevel2Sequence,sequenceName =project_level2_t_projectlevel2_seq,allocationSize = 1)
@Table name =project_level2_t)
public class ProjectLevel2Repository实现Serializable {

private static final long serialVersionUID = 1L;
$ b $ public ProjectLevel2Repository(){
}

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator =projectLevel2Sequence)
@Column(name =projectlevel2id)
private long projectLevel2Id;

@Column(name =levelname)
private String levelName;


@Column(name =created_by)
private String createdBy;

@Column(name =creation_date)
private String creationDate;


@ManyToOne
@JoinColumn(name =projectlevel1id,referencedColumnName =projectlevel1id)
@JsonIgnore
私人ProjectRepository projectlevel1id;

public Long getProjectLevel2Id(){
return projectLevel2Id;
}


public void setProjectLevel2Id(long projectLevel2Id){
this.projectLevel2Id = projectLevel2Id;
}


public String getLevelName(){
return levelName;
}


public void setLevelName(String levelName){
this.levelName = levelName;
}


public String getCreatedBy(){
return createdBy;
}


public void setCreatedBy(String createdBy){
this.createdBy = createdBy;
}


public String getCreationDate(){
return creationDate;
}


public void setCreationDate(String creationDate){
this.creationDate = creationDate;
}


public ProjectRepository getProjectlevel1id(){
return projectlevel1id;
}


public void setProjectlevel1id(ProjectRepository projectlevel1id){
this.projectlevel1id = projectlevel1id;
}



}

但是当我运行我的应用程序时,我得到这个错误



org.hibernate.MappingException:无法找到具有逻辑名称的列:projectlevel1id in org.hibernate.mapping.Table project_t)及其相关的超类和辅助表

我该如何解决此问题? 解决方案 ProjectLevel2Repository 中使用 @JoinColumn 来映射到 ProjectRepository / code>命名为 projectlevel1id ,它不存在。从你所描述的,这应该被映射到 ProjectLevel1Repository

  @ManyToOne 
@JoinColumn(name =projectlevel1id,referencedColumnName =projectlevel1id)
@JsonIgnore
Private ProjectLevel1Repository projectlevel1;


I have 5 tables every table has relation one to many with the next table
Project_t -> project_level1_t -> project_level2_t -> project_level3_t -> project_level4_t
I want to user hibernate with these tables

CREATE TABLE project_t
(
  projectid serial NOT NULL,
  address1 character varying(128),
  postcode character varying(7),
  city character varying(64),
  level_four_name character varying(128),
  CONSTRAINT project_t_pkey PRIMARY KEY (projectid),
  CONSTRAINT projectcode_unique UNIQUE (projectcode)
)

And project_level1_t

CREATE TABLE project_level1_t
(
  projectlevel1id integer NOT NULL DEFAULT nextval('project_level1_t_projectlevel1pk_seq'::regclass),
  levelname character varying(256),
  projectid integer,
  CONSTRAINT project_level1_t_pkey PRIMARY KEY (projectlevel1id),
  CONSTRAINT project_level1_t_project_t_fkey FOREIGN KEY (projectid)
      REFERENCES project_t (projectid) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

And project_level2_t

CREATE TABLE project_level2_t
(
  projectlevel2id integer NOT NULL DEFAULT nextval('project_level2_t_projectlevel2_seq'::regclass),
  levelname character varying(256),
  projectlevel1id integer,
  CONSTRAINT project_level2_t_pkey PRIMARY KEY (projectlevel2id),
  CONSTRAINT project_level2_t_projec_level_1_fkey FOREIGN KEY (projectlevel1id)
      REFERENCES project_level1_t (projectlevel1id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION

And this is the Repository files

   package ma.eurnet.mp.tables.model;

    import javax.persistence.GenerationType;

    @JsonAutoDetect
    @Entity
    @Table(name = "project_t")
    public class ProjectRepository implements Serializable {

        private static final long serialVersionUID = 1L;

        public ProjectRepository() {
        }

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "projectid")
        private Long projectId;

        @OneToMany(fetch = FetchType.EAGER, mappedBy="project")
        @JsonIgnore
        private List<ProjectLevel1Repository> projectlevel1 = new ArrayList<ProjectLevel1Repository>();

        public Long getProjectId() {
            return projectId;
        }

        public void setProjectId(Long projectId) {
            this.projectId = projectId;
        }

        public List<ProjectLevel1Repository> getProjectlevel1() {
            return projectlevel1;
        }

        public void setProjectlevel1(List<ProjectLevel1Repository> projectlevel1) {
            this.projectlevel1 = projectlevel1;
        }

and

 package ma.eurnet.mp.tables.model;

    @JsonAutoDetect
    @Entity
    @SequenceGenerator(name = "projectLevel1Sequence", sequenceName = "project_level1_t_projectlevel1pk_seq", allocationSize = 1)
    @Table(name="project_level1_t")
    public class ProjectLevel1Repository implements Serializable {

        private static final long serialVersionUID = 1L;

        public ProjectLevel1Repository() {
        }

        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "projectLevel1Sequence")
        @Column(name = "projectlevel1id")
        private Long projectLevel1Id;    

        @ManyToOne
        @JoinColumn(name="projectid", referencedColumnName = "projectid")
        @JsonIgnore
        private ProjectRepository project;

    @OneToMany(fetch = FetchType.EAGER, mappedBy="projectlevel1id")
        @JsonIgnore
        private List<ProjectLevel2Repository> projectlevel2 = new ArrayList<ProjectLevel2Repository>();

        public List<ProjectLevel2Repository> getProjectlevel2() {
            return projectlevel2;
        }

        public Long getProjectLevel1Id() {
            return projectLevel1Id;
        }


        public void setProjectLevel1Id(Long projectLevel1Id) {
            this.projectLevel1Id = projectLevel1Id;
        }


        public ProjectRepository getProject() {
            return project;
        }


        public void setProject(ProjectRepository project) {
            this.project = project;
        }




    }

And

package ma.eurnet.mp.tables.model;

import java.io.Serializable;


@JsonAutoDetect
@Entity
@SequenceGenerator(name = "projectLevel2Sequence", sequenceName = "project_level2_t_projectlevel2_seq", allocationSize = 1)
@Table(name="project_level2_t")
public class ProjectLevel2Repository implements Serializable {

    private static final long serialVersionUID = 1L;

    public ProjectLevel2Repository() {
    }

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "projectLevel2Sequence")
    @Column(name = "projectlevel2id")
    private Long projectLevel2Id;

    @Column(name = "levelname")
    private String levelName;


    @Column(name = "created_by")
    private String createdBy;

    @Column(name = "creation_date")
    private String creationDate;


    @ManyToOne
    @JoinColumn(name="projectlevel1id", referencedColumnName = "projectlevel1id")
    @JsonIgnore
    private ProjectRepository projectlevel1id;

    public Long getProjectLevel2Id() {
        return projectLevel2Id;
    }


    public void setProjectLevel2Id(Long projectLevel2Id) {
        this.projectLevel2Id = projectLevel2Id;
    }


    public String getLevelName() {
        return levelName;
    }


    public void setLevelName(String levelName) {
        this.levelName = levelName;
    }


    public String getCreatedBy() {
        return createdBy;
    }


    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }


    public String getCreationDate() {
        return creationDate;
    }


    public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
    }


    public ProjectRepository getProjectlevel1id() {
        return projectlevel1id;
    }


    public void setProjectlevel1id(ProjectRepository projectlevel1id) {
        this.projectlevel1id = projectlevel1id;
    }



}

but when I run my application I get this error

org.hibernate.MappingException: Unable to find column with logical name: projectlevel1id in org.hibernate.mapping.Table(project_t) and its related supertables and secondary tables

how can I fix this please

解决方案

In ProjectLevel2Repository you have a mapping towards ProjectRepository using a @JoinColumn named projectlevel1id which doesn't exist. From what you describe, this should be mapped to ProjectLevel1Repository

@ManyToOne
@JoinColumn(name="projectlevel1id", referencedColumnName = "projectlevel1id")
@JsonIgnore
private ProjectLevel1Repository projectlevel1;

这篇关于无法找到具有逻辑名称的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆