&引用;“未找到表格”;hibernate异常

&引用;“未找到表格”;hibernate异常,hibernate,Hibernate,hibernate出现以下异常: 10:18:14,795 INFO [SchemaValidator] Running schema validator 10:18:14,795 INFO [SchemaValidator] fetching database metadata 10:18:16,958 INFO [DatabaseMetadata] table not found: DUMMY_TABLE 10:18:16,963 ERROR [AbstractKernelCon

hibernate出现以下异常:

10:18:14,795 INFO  [SchemaValidator] Running schema validator

10:18:14,795 INFO  [SchemaValidator] fetching database metadata

10:18:16,958 INFO  [DatabaseMetadata] table not found: DUMMY_TABLE

10:18:16,963 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=bkoMdw-ear.ear/bkoMdw-ejb.jar#bkoMdw state=Create
javax.persistence.PersistenceException: [PersistenceUnit: bkoMdw] Unable to build EntityManagerFactory

(...)

Caused by: org.hibernate.HibernateException: Missing table: DUMMY_TABLE
     at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1127)
     at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:359)
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
     at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
     at 

org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
10:18:14795信息[SchemaValidator]运行模式验证程序
10:18:14795信息[SchemaValidator]正在获取数据库元数据
10:18:16958未找到信息[DatabaseMetadata]表:虚拟表
10:18:16963错误[AbstractKernelController]安装开始时出错:name=persistence.unit:unitName=bkoMdw ear.ear/bkoMdw ejb.jar#bkoMdw state=Create
javax.persistence.PersistenceException:[PersistenceUnit:bkoMdw]无法构建EntityManagerFactory
(...)
原因:org.hibernate.hibernate异常:缺少表:虚拟表
位于org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1127)
位于org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
位于org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:359)
位于org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
位于org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
在
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
问题在于该表存在并且数据源文件配置正确

我错过了什么?有什么建议可以解决这个问题吗


提前谢谢

问题在于,您认为表存在,并且数据源配置正确,而Hibernate知道这不正确

增加日志级别并使用
-Dhibernate.show_sql=true
启用sql语句的日志记录。这应该有助于找到这个

[编辑]还要确保在
@表格
注释前后没有空格。如果您有此注释:

@Table(name = "myTable ") // Note the space after the name!!

然后Hibernate将使用带引号的名称来创建表(因此您将有一个SQL名称为“MYTABLE”)的表,但在您运行查询时,它不会总是引用名称。

还要确保大小写正确。您可能会将它作为虚拟表保存在数据库中。

我在映射中使用的视图也有同样的问题。禁用Hibernate的验证后,它可以正常工作。似乎验证在视图方面有问题。

@Hendrik的想法是正确的。我也有同样的问题,我可以通过将beans bellow添加到我的applicationon上下文文件来解决这个问题

<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
    <property name="caseSensitiveTableNames" value="false"/>
    <property name="qualifiedTableNames" value="true"/>
    <property name="datatypeFactory">
        <bean class="org.dbunit.ext.mysql.MySqlDataTypeFactory"/>
    </property>
    <property name="metadataHandler">
        <bean class="org.dbunit.ext.mysql.MySqlMetadataHandler"/>
    </property>
</bean>
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">
    <property name="databaseConfig" ref="dbUnitDatabaseConfig"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="transactionAware" value="true"/>
    <property name="schema" value="yourSchemaName"/>
</bean>

我对mysql数据库也有同样的问题。 问题是我对表使用了大写名称。
我把它们放低了,现在一切都正常了。

我从hibernate得到了同样的例外。 在我的例子中,这是因为数据库用户没有获得查看表的正确授权。这些表肯定在数据库中

在我为这个数据库的用户分配了角色db_datareader之后,它工作了


然而,在另一个例子中,表实际上并不存在,我从hibernate得到了完全相同的异常。如果表在那里,我想hibernate可能不会显示更多信息,因为安全原因。

在我更改时为我工作 @表(name=“schema.Table”) 到
@Table(name=“Table”,schema=“schema”)

我在postgresql和hibernate 5.2.10中遇到了类似的问题

这张桌子肯定存在。当我关闭验证时,一切正常。结果可能是找不到该表,因为hibernate无法处理任何指定的架构。它似乎与:


我更新了postgresql和方言(PostgreSqlXXdial)。之后问题就消失了。

在我的案例中,区分大小写很重要。虽然在hibernate映射中声明table='DUMMY_table'在Windows机器上完全工作,但在将mysql服务器移动到linux系统后,它就不工作了。我必须将所有大写字母改为小写字母,例如table='dummy\u table'

我正在使用flyway db迁移,而对于oracle,由于单用户、单模式的限制,我必须强制我的所有微服务使用相同的模式。 令人惊讶的是,很少有微服务能够读取从依赖库加载的公共表,但是由Kubernetes部署在其间创建的一个服务由于此错误而失败

以下设置有助于修复此问题:

设置ddl auto=none

# JPA Configuration
  jpa:
    database-platform: ${DB_DIALECT:org.hibernate.dialect.Oracle12cDialect}
    hibernate:
      ddl-auto: none

对我来说,我在重命名我的表后遇到了这个错误,但它仍然在说:

缺少表:旧名称

尽管我确信我已经更新了所有的参考资料


原来我必须在Eclipse中进行Maven清理,这就解决了问题。

我的表名和实体名不匹配。拼写错误。ThanksI也有同样的问题。有人把@Table(name=“myTable”)放在一个实体上,Hibernate创建了这个表。当Hibernate检查表是否存在时,它可能会修剪表名并给出错误。Hibernate的输出不会显示带空格的表名。他们应该添加一些括号或something@Tommey:提交一份错误报告,请注意,对于实际的表,我得到了
table not found
,但是视图可以工作。