NetBeans8 Web服务连接PostgreSQL表提示无主键但已设置该如何解决
问题原因
- NetBeans 8内置的PostgreSQL JDBC驱动版本过低,无法正确识别PostgreSQL 10及以上版本新增的
GENERATED ALWAYS AS IDENTITY类型自增主键的约束信息,会误判表不存在主键。 - 你自定义了主键约束名为
user_pkey,老版本NetBeans的元数据扫描逻辑默认匹配「表名_pkey」格式的默认主键约束名,识别不到自定义命名的主键。 - 数据库连接未指定默认schema,你创建的表位于public schema下,如果NetBeans扫描元数据时没有加载public schema的内容,也会读取不到主键配置。
解决方案
- 升级JDBC驱动
下载适配你PostgreSQL版本的最新JDBC驱动jar包,打开NetBeans的「服务」面板,找到「数据库」-「驱动」下的PostgreSQL驱动,右键选择「属性」,替换旧驱动jar包为新版本,重启NetBeans后重新连接数据库再尝试添加表。 - 重建主键使用默认命名
执行以下SQL删除自定义命名的主键,重新创建使用默认命名的主键,适配老版本驱动的识别规则:
ALTER TABLE public.test_user DROP CONSTRAINT user_pkey; ALTER TABLE public.test_user ADD PRIMARY KEY (id);
执行完成后刷新NetBeans中的数据库连接再重试。
- 配置连接指定schema
打开当前PostgreSQL数据库连接的属性设置,在高级参数中添加currentSchema=public,确保元数据扫描时会读取public schema下的约束信息。 - 手动绕开校验
如果以上方案都不生效,可以跳过NetBeans的自动生成实体向导,手动编写对应表的实体类,自行给id字段添加主键注解,绕开自动识别的校验逻辑。
内容的提问来源于stack exchange,提问作者12athos
相关产品推荐
相关产品推荐

