Java 找不到具有逻辑名称的列

Java 找不到具有逻辑名称的列,java,postgresql,hibernate,Java,Postgresql,Hibernate,我有5个表,每个表与下一个表有一对多的关系 项目->项目1级->项目2级->项目3级->项目4级 我想让用户休眠这些表 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(12

我有5个表,每个表与下一个表有一对多的关系
项目->项目1级->项目2级->项目3级->项目4级
我想让用户休眠这些表

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)
)
和项目1级

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
)
和项目2级

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
这是存储库文件

   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;
        }
但是当我运行我的应用程序时,我得到了这个错误

org.hibernate.MappingException:在org.hibernate.mapping.Table(project_t)及其相关的超表和辅助表中找不到逻辑名称为projectlevel1id的列


如何修复此问题请参见
ProjectLevel2Repository
中的
ProjectRepository
使用名为
projectlevel1id
@JoinColumn
映射到
ProjectRepository
。根据您的描述,这应该映射到
ProjectLevel1Repository

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

是的,在ProjectLevel2Repository中,我想映射到ProjectLevel1Repository,但我不知道怎么做it@PredragMaric根据上面的示例,我得到了类似“SqlExceptionHelper:ERROR:column“projectlevel1id”中的null值违反了非null约束web_1 | Detail”的null问题。我遵循了与上面相同的代码。@我不确定,为了得到更好的答案,您可能应该创建一个包含更多细节的新问题。@Pred-Fragmaric我已经为sam发布了新问题,并且也得到了修复。问题:谢谢,你救了我一天。我得到了关于我的数据模型设计的修正。
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;
    }



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