关于hibernate中提示can not create table ******
最近这两天,一直在搞hibernate,被 其中一个问题困扰了好久.在网上找了好久,一直都没有找到可行的方法,把jdk,jre,tomcat,装了拆,拆了装,可就是搞不好.实在是没有办法,又重新建了一个项目来测试,,从一点一滴开始试.所有的代码全部都手写,,,,可是问题依旧还在.
之所以一直没有找到解决办法,其实是自己的思维一直局限在一处,,,一直在想着hibernate只要把配置文件配置好,它就可以自己在数据库创建表结构,自己增删改查,相当的方便,可是自己 当时成功了,为什么这次却一而再再而三的失败呢....后来再想,要不创建一个数据库,然后再创建一个表.直接用hibernate插入数据试试....没想到竟然没有报错,当时那个心情啊....
现将错误代码贴上:
WARN: Table 'myapp.user' doesn't exist
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not extract ResultSetat org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:80)at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91)at org.hibernate.id.IncrementGenerator.initializePreviousValueHolder(IncrementGenerator.java:132)at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:69)at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:118)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209)at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194)at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715)at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707)at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702)at com.huangchao.model.HibernateTest.main(HibernateTest.java:21)
上面显示的错误提示是不能执行结果集,,,,,,,原因就是没有创建表,那当然就不能执行了.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'myapp.user' doesn't exist at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:526)at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)at com.mysql.jdbc.Util.getInstance(Util.java:387)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625)at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1962)at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82)... 12 more
看到没有,这上面显示的就是表不存在....
经检查.....hibernate.cfg.xml中有一个配置是这样写的:
<property name="hibernate.hbm2dll">create</property>
一看,不对呀,如果要想自动建表的话那应该是这样的啊:
<property name="hibernate.hbm2ddl.auto">create</property>
原来是自己少打了.auto啊,千万要注意,.auto是不能少的,重要的事说三遍:
.auto是不能少
.auto是不能少
.auto是不能少
最后得出的结论是:
hibernate在没有手动为数据库创建特定的表的时候,且在配置文件里没有设置自动创建表,,这时就会报错.
完整代码如下:
Model:User.java
package com.huangchao.model;public class User {private int id ;private String username ;private String password ;public User(){}public User(String username,String password){this.username = username;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
Mapping:User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.huangchao.model.User" table="user"> <id name="id" type="int"><column name="id"></column><generator class="increment"></generator> </id> <property name="username" type="java.lang.String"><column name="username" /> </property> <property name="password" type="java.lang.String"><column name="password" /> </property> </class> </hibernate-mapping>
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">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///myapp?characterEncoding=utf8</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><!-- 设定数据库言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 设置数据 库的SQL语句的格式--><property name="hibernate.show_sql">true</property><property name="hibernate.format_sql">true</property><property name="hibernate.hbm2ddl">create</property><mapping resource="com/huangchao/model/User.hbm.xml"/></session-factory> </hibernate-configuration>
Test:HibernateTest.java
package com.huangchao.model;import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry;public class HibernateTest {public static void main(String[] args) {Configuration config = new Configuration().configure();ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);Session session = sessionFactory.openSession();User user = new User("zhoubin","33333");session.save(user);Transaction tx = session.beginTransaction();tx.commit();session.close();}}
转载于:https://www.cnblogs.com/sirab415/p/5751315.html
关于hibernate中提示can not create table ******相关推荐
- DataTables中提示:DataTables warning: table id=example - Cannot reinitialise DataTable.
场景 在页面中有一个下拉框select,在select的change事件中,每此要根据选择的值的 不同进而在dataTables中显示不一样的值. 错误提示如图: 错误代码如下: $(document ...
- ireport修改jrxml中的sql语句_SQL中的create table与insert into语句
学习交流,欢迎留言~~ 今天学习SQL的时候遇到了个小疑问,创建数据表肯定是用create table语句的,但是为什么后面总是跟随着insert into呢? 身为一个不弄白不舒服斯基,走起~~~ ...
- mysql select table_MySQL中的CREATE TABLE……SELECT语句
在MySQL中,可使用CREATE TALBE. . .SELECT语句将查询结果转存到一个新表中. 创建新表 create table tabname(col1 type1 [not null] [ ...
- MySQL创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- 1、创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- mysql创建表参数_MySQL创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- mysql创建销售表_MySQL创建数据表(CREATE TABLE语句)
在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性.引用完整性和域 ...
- MySQL创建、更改数据表(CREATE TABLE语句)
< MySQL数据表的基本操作MySQL修改数据表 > 在创建数据库之后,接下来就要在数据库中创建数据表.所谓创建数据表,指的是在已经创建的数据库中建立新表. 创建数据表的过程是规定数据列 ...
- Mysql:ERROR 1005 (HY000): Can‘t create table ‘student.选课‘ (errno: 150)解决方法
一.前面我按照正常操作一步步创建数据库和表,但总是会报错.. 复制各种错误去百度找答案,但是有时候有答案也不能解决出现的问题. 1.改变了数据库的字符集类型,但是依旧没有解决, 2.因为这个表里面还是 ...
最新文章
- 交叉表的简单实现2:使用前端程序实现
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
- JAVA8常量池监控_深入探索Java常量池
- iOS 生日字符串转化年龄
- 第一批鸿蒙系统手机型号,鸿蒙2.0第一批机型名单正式披露!花粉却感叹:华为不够厚道!...
- EasyUI datagrid 分页保持选中状态
- Django CMS介绍(转载)
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
- AAC ADTS格式分析
- 【干货】深度学习中的线性代数---简明教程
- 一个超级简单的HTML模板框架源代码以及使用示例
- 如何在网页中播放FLV文件的代码
- oracle数据库中文乱码解决办法
- 重装系统显示缺少计算机所需的介质驱动程序,安装WIN7提示“缺少所需的CD/DVD驱动器设备驱动程序”的解决办法...
- 设计、经验和变革:做好IT战略规划的三要素
- APP消息推送(Push),竟然还有这么多你不知道的
- 微信输入法,终于来了。。。
- 达芬奇密码 第八十二章
- 数商云商业服务业SaaS管理系统:实现高效业务协作,助力企业完善数字化转型之路
- react学习之路(一)
热门文章
- ACCESS在哪输入SQL语句
- Python列表的切片
- 判断字符串中的括号是否匹配——c和c++实现
- Linux软件源apt,仓库,包的概念
- AbstractListView源码分析6
- 关于Fragment、Tabhost和FragmentPagerAdapter来实现导航栏的效果
- spring 项目中集成 Protocol Buffers 示例
- 浅谈数据仓库建设中的数据建模方法
- 状态很差时,就不要再继续做了。因为是徒劳,再就是过段时间或第二天再看,会豁然开朗,原来存在的疑难问题都迎刃而解。平时没事的时候要不断地给自己充电,让自己了解多方面知识。...
- [UE4]使用蓝图关闭对象的碰撞SetActorEnableCollision