You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse+Maven+Hibernate Tools逆向工程报错:表已存在主键

Hibernate Tools逆向工程PostgreSQL报错:Table(public.newtable) already has a primary key!

问题场景

使用Hibernate Tools套件的逆向工程工具生成PostgreSQL数据库表模型时,仅newtable表触发如下报错,其余表可正常处理:

org.jboss.tools.hibernate.runtime.spi.HibernateException: Table(public.newtable) already has a primary key!
    at org.hibernate.eclipse.console.workbench.LazyDatabaseSchemaWorkbenchAdapter$2.execute(LazyDatabaseSchemaWorkbenchAdapter.java:132)
    at org.hibernate.console.execution.DefaultExecutionContext.execute(DefaultExecutionContext.java:63)
    at org.hibernate.console.ConsoleConfiguration.execute(ConsoleConfiguration.java:107)
    at org.hibernate.eclipse.console.workbench.LazyDatabaseSchemaWorkbenchAdapter.readDatabaseSchema(LazyDatabaseSchemaWorkbenchAdapter.java:119)
    at org.hibernate.eclipse.console.workbench.LazyDatabaseSchemaWorkbenchAdapter.getChildren(LazyDatabaseSchemaWorkbenchAdapter.java:60)
    at org.hibernate.eclipse.console.workbench.BasicWorkbenchAdapter.fetchDeferredChildren(BasicWorkbenchAdapter.java:104)
    at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:219)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

涉事表DDL

CREATE TABLE public."newtable" (
    "codiceFiscale" varchar(16) NOT NULL,
    nome varchar(100) NULL,
    cognome varchar(100) NULL,
    email varchar(255) NULL,
    indirizzo varchar(255) NULL,
    "idComune" int4 NULL,
    "idStato" varchar(3) NULL,
    "idProvincia" int4 NULL,
    cap varchar(10) NULL,
    "ruolo" varchar(1) NULL,
    "idAccount" int4 NULL,
    username varchar(100) NULL,
    rup varchar(10) NULL,
    "codice" varchar(20) NULL,
    "codiceNUTS" varchar(20) NULL,
    "codiceStatoExtraUE" varchar(100) NULL,
    "dataAbilitazione" timestamp NULL,
    "dataRegistrazione" timestamp NULL,
    "numeroRinnovo" int4 NULL,
    CONSTRAINT newtable_pk PRIMARY KEY ("codiceFiscale")
);

Hibernate配置文件(hibernate.cfg.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.password">XXXXXXXXXXXXXXXXXXX</property>
        <property name="hibernate.connection.url">jdbc:postgresql://XXX.XXX.XXX.XXX:5432/test</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.default_schema">public</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    </session-factory>
</hibernate-configuration>

解决方法

移除DDL中表名和列名的双引号,修改后的DDL如下:

CREATE TABLE public.newtable (
    codiceFiscale varchar(16) NOT NULL,
    nome varchar(100) NULL,
    cognome varchar(100) NULL,
    email varchar(255) NULL,
    indirizzo varchar(255) NULL,
    idComune int4 NULL,
    idStato varchar(3) NULL,
    idProvincia int4 NULL,
    cap varchar(10) NULL,
    ruolo varchar(1) NULL,
    idAccount int4 NULL,
    username varchar(100) NULL,
    rup varchar(10) NULL,
    codice varchar(20) NULL,
    codiceNUTS varchar(20) NULL,
    codiceStatoExtraUE varchar(100) NULL,
    dataAbilitazione timestamp NULL,
    dataRegistrazione timestamp NULL,
    numeroRinnovo int4 NULL,
    CONSTRAINT newtable_pk PRIMARY KEY (codiceFiscale)
);

重新执行逆向工程即可正常生成模型。

内容的提问来源于stack exchange,提问作者user2880516

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:35:14