首页 > 解决方案 > postgresql 和 jpa:关系不存在

问题描述

再一次,我想请你帮忙解决 Hibernate、Springboot、Postgresql 的问题。在我的项目中,我有几十个我读写的表,我对每个表都使用了相同的配置,没有问题,但是其中一个有一些问题:

这是映射我的表的类:

package com.mycompany.ingestion.entities.mappingdb;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="td_titauto")
public class TdTitAuto {
    
    
    @Id
    @SequenceGenerator(name = "seq_td_titauto", sequenceName = "seq_td_titauto", allocationSize=1)
    @GeneratedValue(generator = "seq_td_titauto", strategy = GenerationType.SEQUENCE)
    private Long idTitAuto;
    private String idAuto;
    public Long getIdTitAuto() {
        return idTitAuto;
    }
    public void setIdTitAuto(Long idTitAuto) {
        this.idTitAuto = idTitAuto;
    }
    public String getIdAuto() {
        return idAuto;
    }
    public void setIdAuto(String idAuto) {
        this.idAuto = idAuto;
    }

}

当我运行该项目时,我收到以下错误: 错误:列 tdtitauto0_.id_tit_auto 不存在提示:也许您打算引用列“tdtitauto0_.id_titauto”。

DB 上的表名是 td_titaut。如果我在注解@Table 上添加架构的名称,则没有任何变化,但是如果我删除@Table 注解,则会出现以下错误:

错误:关系“td_tit_auto”不存在 在这种情况下,我不知道为什么要添加下划线字符(表名为 td_titauto,只有一个下划线)。

我也尝试过使用配置文件和注释,但没有任何改变。有什么建议么?非常感谢,我真的很感激我最好的问候斯蒂芬

标签: postgresqlhibernatejpaannotationsmapping

解决方案


似乎您的数据库中有一个名为的表,td_titauto但实体的默认名称是td_tit_auto. 这可能是因为实体名称TdTitAuto而不是TdTitauto.

Hibernate ORM 期望表上有一个名为的列,id_tit_auto但我怀疑您的数据库中的列名是id_titauto. 因此,您需要以这种方式更改映射:

@Entity
@Table(name="td_titauto")
public class TdTitAuto {
    @Id
    @Column(name="id_titauto")
    @SequenceGenerator(...)
    @GeneratedValue(...)
    private Long idTitAuto;
}

假设 id 列的名称是id_titauto.

可能,这也会起作用:

@Entity
public class TdTitauto {
    @Id
    @SequenceGenerator(...)
    @GeneratedValue(...)
    private Long idTitauto;
}

推荐阅读