Java 错误:org.postgresql.util.PSQLException:错误:列userinfo0\u0.dtype不存在

Java 错误:org.postgresql.util.PSQLException:错误:列userinfo0\u0.dtype不存在,java,spring,postgresql,Java,Spring,Postgresql,我正在SpringBoot中开发一个web应用程序,并使用PostgreSQL作为我的数据库 我有四节课。一个是父母,另外三个是孩子。这是一种等级继承。我在父类中有3个子类的公共字段,当我实现它时,我得到了dtype错误,即它说我没有在父类中键入dtype列,然后我在数据库中添加了名为userInfo_type的dtype列,并手动为其赋值“0”,在父类的实体类中,我指定了 @DiscriminatorColumn(name=“userInfo\u type”,discriminatorType

我正在SpringBoot中开发一个web应用程序,并使用PostgreSQL作为我的数据库

我有四节课。一个是父母,另外三个是孩子。这是一种等级继承。我在父类中有3个子类的公共字段,当我实现它时,我得到了dtype错误,即它说我没有在父类中键入dtype列,然后我在数据库中添加了名为userInfo_type的dtype列,并手动为其赋值“0”,在父类的实体类中,我指定了

@DiscriminatorColumn(name=“userInfo\u type”,discriminatorType=discriminatorType.INTEGER,columnDefinition=“0”)
)

@DiscriminatorValue(“1”)、@DiscriminatorValue(“2”)、@DiscriminatorValue(“3”)
分别在三个儿童班

注意:我没有在四个实体中的任何一个实体中添加userInfo_type列作为属性之一,也没有在创建数据库表和列的db脚本中添加,我显式地在db中添加了列,并分别将
@DiscriminatorColumn
添加到父级和
@DiscriminatoryValue
添加到子级,运行之后,我得到了此错误

由以下原因引起:org.postgresql.util.PSQLException:错误:列userinfo0\u0.user\u info\u类型不存在
提示:也许您想引用“userinfo0.userInfo\u类型”列。
职位:901
位于org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2510)
位于org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2245)
位于org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:311)
位于org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:447)
位于org.postgresql.jdbc.PgStatement.execute(PgStatement.java:368)
位于org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159)
位于org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:109)
位于com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
位于com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60)
... 105多
2020-03-23 13:16:21.572调试8796---[nio-8080-exec-1]m.m.a.RequestResponseBodyMethodProcessor:使用“应用程序/json”,给定[*/*]并受支持[
已命名(手动)创建的列:
userInfo\u type
当将鉴别器字段名转换为列名Hibernate时,在任何大写字母之前使用蛇形命名,并在其前面加下划线(
\u

简单地说:
userInfo\u-type
解析为
USER\u-INFO\u-type
,而不是
userInfo\u-type

如果您可以手动操作该表,则可以将创建的列重命名为
USER\u INFO\u TYPE

Ohterwise,您必须配置Spring命名策略。

已命名(手动)创建的列:
userInfo\u type
,当将鉴别器字段名转换为列名Hibernate时,在任何大写字母之前使用蛇形命名,并在其前面加下划线(
\u

简单地说:
userInfo\u-type
解析为
USER\u-INFO\u-type
,而不是
userInfo\u-type

如果您可以手动操作该表,则可以将创建的列重命名为
USER\u INFO\u TYPE


Ohterwise,您必须配置Spring命名策略。

您可以显示您的表结构吗?我还需要添加所有实体类声明(删除所有不相关的字段和方法)Spring使用了
org.hibernate.cfg.ImprovedNamingStrategy
,默认情况下,命名策略将camelCase替换为
\uCode>,因此您的列名将从
userInfo\u type
更改为
user\u info\u type
。请参阅此处了解解决方案,尽管实际上,因为postgres不区分大小写(除非您引用所有内容…),否则最好更新数据库以使用标准名称策略。您能显示您的表结构吗?我还需要添加所有实体类声明(删除所有不相关的字段和方法)Spring使用了
org.hibernate.cfg.ImprovedNamingStrategy
,默认情况下,命名策略将camelCase替换为
\uCode>,因此您的列名将从
userInfo\u type
更改为
user\u info\u type
。请参阅此处了解解决方案,尽管实际上,因为postgres不区分大小写(除非你什么都引用…),则最好更新数据库以使用标准名称策略。这就是问题所在,但您不必重命名列。确实,重命名列不是唯一的选项。但是,切换命名策略将对所有字段产生副作用。答案已更新,以反映命名策略选项。这是问题所在,但您不必重命名列确实,重命名列不是唯一的选项。但切换命名策略将对所有字段产生副作用。答案已更新以反映命名策略选项。