休眠sql错误1146

Posted

技术标签:

【中文标题】休眠sql错误1146【英文标题】:Hibernate sql error1146 【发布时间】:2013-07-10 06:57:58 【问题描述】:

我正在尝试简单的休眠示例。但是,我无法使用休眠创建数据库表。可能是什么问题? Java version1.7.Hibernate 3.6.4 我的hibernate.cfg.xml直接在src目录下:

错误的 com.mysql.jdbc.Driver 密码 jdbc:mysql://localhost:3306/hibernatedb 根 org.hibernate.dialect.MySQL方言 真的

    <mapping class="org.koushik.javabrains.dto.UserDetails"></mapping>
</session-factory>

我的主要课程: 公共类 HibernateTest

public static void main(String[] args)


UserDetails user=new UserDetails();

user.setUserId(1);

user.setUsername("First user");

SessionFactory sessionfactory=new Configuration().configure().buildSessionFactory();
Session session=sessionfactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();

这是我得到的完整跟踪: 202 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final 213 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.4.Final 215 [main] INFO org.hibernate.cfg.Environment - hibernate.properties 未找到 220 [main] INFO org.hibernate.cfg.Environment - 字节码提供程序名称:javassist 227 [main] INFO org.hibernate.cfg.Environment - 使用 JDK 1.4 java.sql.Timestamp 处理 331 [main] INFO org.hibernate.cfg.Configuration - 从资源配置:/hibernate.cfg.xml 331 [main] INFO org.hibernate.cfg.Configuration - 配置资源:/hibernate.cfg.xml 466 [main] INFO org.hibernate.cfg.Configuration - 配置的 SessionFactory:null 549 [main] INFO org.hibernate.cfg.AnnotationBinder - 来自注释类的绑定实体:org.koushik.javabrains.dto.UserDetails 618 [main] INFO org.hibernate.cfg.annotations.EntityBinder - 在表 UserDetails 上绑定实体 org.koushik.javabrains.dto.UserDetails 693 [main] INFO org.hibernate.cfg.Configuration - 未找到休眠验证器:忽略 703 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - 无法在类路径上找到 org.hibernate.search.event.FullTextIndexEventListener。未启用休眠搜索。 715 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - 使用 Hibernate 内置连接池(不用于生产!) 715 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - 休眠连接池大小:20 715 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - 自动提交模式:false 733 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - 使用驱动程序:com.mysql.jdbc.Driver 在 URL:jdbc:mysql://localhost:3306/hibernatedb 733 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - 连接属性:user=root, password=** 1197 [main] INFO org.hibernate.dialect.Dialect - 使用方言:org.hibernate.dialect.MySQLDialect 1219 [main] INFO org.hibernate.cfg.SettingsFactory - 数据库 -> 名称:MySQL 版本:5.6.12-日志 专业:5 未成年人:6 1219 [main] INFO org.hibernate.cfg.SettingsFactory - 驱动程序 -> 名称:MySQL 连接器 Java 版本:mysql-connector-java-5.1.25(修订:$bzr.revision-id) 专业:5 未成年人:1 1220 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - 使用默认事务策略(直接 JDBC 事务) 1222 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - 未配置 TransactionManagerLookup(在 JTA 环境中,不建议使用读写或事务二级缓存) 1222 [main] INFO org.hibernate.cfg.SettingsFactory - beforeCompletion() 期间自动刷新:禁用 1222 [main] INFO org.hibernate.cfg.SettingsFactory - 事务结束时自动关闭会话:禁用 1223 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC 批处理大小:15 1223 [main] INFO org.hibernate.cfg.SettingsFactory - 版本化数据的 JDBC 批量更新:禁用 1223 [main] INFO org.hibernate.cfg.SettingsFactory - 可滚动的结果集:启用 1223 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys():启用 1223 [main] INFO org.hibernate.cfg.SettingsFactory - 连接释放模式:自动 1224 [main] INFO org.hibernate.cfg.SettingsFactory - 最大外部连接获取深度:2 1224 [main] INFO org.hibernate.cfg.SettingsFactory - 默认批量获取大小:1 1225 [main] INFO org.hibernate.cfg.SettingsFactory - 使用 cmets 生成 SQL:禁用 1225 [main] INFO org.hibernate.cfg.SettingsFactory - 按主键排序 SQL 更新:已禁用 1225 [main] INFO org.hibernate.cfg.SettingsFactory - 为批处理订购 SQL 插入:禁用 1225 [main] INFO org.hibernate.cfg.SettingsFactory - 查询翻译器:org.hibernate.hql.ast.ASTQueryTranslatorFactory 1228 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - 使用 ASTQueryTranslatorFactory 1228 [main] INFO org.hibernate.cfg.SettingsFactory - 查询语言替换: 1228 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL 严格遵守:禁用 1228 [main] INFO org.hibernate.cfg.SettingsFactory - 二级缓存:启用 1228 [main] INFO org.hibernate.cfg.SettingsFactory - 查询缓存:禁用 1228 [main] INFO org.hibernate.cfg.SettingsFactory - 缓存区域工厂:org.hibernate.cache.impl.NoCachingRegionFactory 1229 [main] INFO org.hibernate.cfg.SettingsFactory - 优化缓存以减少放置:禁用 1229 [main] INFO org.hibernate.cfg.SettingsFactory - 结构化二级缓存条目:已禁用 1237 [main] INFO org.hibernate.cfg.SettingsFactory - 将所有 SQL 回显到标准输出 1238 [main] INFO org.hibernate.cfg.SettingsFactory - 统计信息:禁用 1238 [main] INFO org.hibernate.cfg.SettingsFactory - 已删除的实体合成标识符回滚:禁用 1238 [main] INFO org.hibernate.cfg.SettingsFactory - 默认实体模式:pojo 1238 [main] INFO org.hibernate.cfg.SettingsFactory - 命名查询检查:启用 1238 [main] INFO org.hibernate.cfg.SettingsFactory - 检查核心中的可空性(当 Bean 验证打开时应禁用):启用 1270 [main] INFO org.hibernate.impl.SessionFactoryImpl - 构建会话工厂 1278 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [materialized_clob] 覆盖以前:org.hibernate.type.MaterializedClobType@8247262 1278 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [characters_clob] 覆盖以前:org.hibernate.type.PrimitiveCharacterArrayClobType@10d1841b 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [clob] 覆盖以前:org.hibernate.type.ClobType@2b38113d 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [java.sql.Clob] 覆盖以前:org.hibernate.type.ClobType@2b38113d 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [materialized_blob] 覆盖以前:org.hibernate.type.MaterializedBlobType@6df3d1f5 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [blob] 覆盖以前:org.hibernate.type.BlobType@225d6438 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [java.sql.Blob] 覆盖以前:org.hibernate.type.BlobType@225d6438 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [wrapper_materialized_blob] 覆盖以前:org.hibernate.type.WrappedMaterializedBlobType@215eaa28 1279 [main] INFO org.hibernate.type.BasicTypeRegistry - 类型注册 [wrapper_characters_clob] 覆盖以前:org.hibernate.type.CharacterArrayClobType@4df53935 1569 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - 未将工厂绑定到 JNDI,未配置 JNDI 名称 Hibernate:插入 UserDetails (username, userId) 值 (?, ?) 1702 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL 错误:1146,SQLState:42S02 1702 [main] 错误 org.hibernate.util.JDBCExceptionReporter - 表 'hibernatedb.userdetails' 不存在 线程“主”org.hibernate.exception.SQLGrammarException 中的异常:无法执行 JDBC 批量更新 在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268) 在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184) 在 org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 在 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) 在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) 在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) 在 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) 在 org.koushik.hibernate.HibernateTest.main(HibernateTest.java:25) 引起:java.sql.BatchUpdateException:表'hibernatedb.userdetails'不存在 在 com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2054) 在 com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1467) 在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) ... 8 更多 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'hibernatedb.userdetails'不存在 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 在 com.mysql.jdbc.Util.getInstance(Util.java:386) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) 在 com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 在 com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458) 在 com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2006) ... 11 更多

请帮我解决这个问题。谢谢。

【问题讨论】:

【参考方案1】:

Hibernate 读取和写入表,但不创建它们(默认情况下)。如果您希望 Hibernate 创建您的表,那么您必须将配置文件中的属性 hibernate.hbm2ddl.auto 设置为 one of the documented values:

hibernate.hbm2ddl.auto 在创建 SessionFactory 时自动验证模式 DDL 或将其导出到数据库。使用 create-drop,当 SessionFactory 显式关闭时,数据库模式将被删除。

例如验证 |更新 |创建 |创建删除

【讨论】:

非常感谢JB!!我从在线资源中复制了配置。它没有那个字段。

以上是关于休眠sql错误1146的主要内容,如果未能解决你的问题,请参考以下文章

数据库错误代码 1146 - 本地与在线

解决MySQL复制出错 Last_SQL_Errno:1146

收到警告:SQL 错误:1205,SQLState:41000 错误:超过锁定等待超时;尝试重新启动事务。使用休眠保存记录

休眠 SQL 错误:17002,SQLState:空 Io 异常:连接重置

MySQL 错误 #1146 无法删除已删除的表

休眠和使用数据库索引会在 CockroachDB 上创建 SQL 语法错误