关于hibernate中提示can not create table ******
最近這兩天,一直在搞hibernate,被 其中一個問題困擾了好久.在網(wǎng)上找了好久,一直都沒有找到可行的方法,把jdk,jre,tomcat,裝了拆,拆了裝,可就是搞不好.實在是沒有辦法,又重新建了一個項目來測試,,從一點一滴開始試.所有的代碼全部都手寫,,,,可是問題依舊還在.
之所以一直沒有找到解決辦法,其實是自己的思維一直局限在一處,,,一直在想著hibernate只要把配置文件配置好,它就可以自己在數(shù)據(jù)庫創(chuàng)建表結(jié)構(gòu),自己增刪改查,相當(dāng)?shù)姆奖?可是自己 當(dāng)時成功了,為什么這次卻一而再再而三的失敗呢....后來再想,要不創(chuàng)建一個數(shù)據(jù)庫,然后再創(chuàng)建一個表.直接用hibernate插入數(shù)據(jù)試試....沒想到竟然沒有報錯,當(dāng)時那個心情啊....
?
現(xiàn)將錯誤代碼貼上:
?
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)上面顯示的錯誤提示是不能執(zhí)行結(jié)果集,,,,,,,原因就是沒有創(chuàng)建表,那當(dāng)然就不能執(zhí)行了.
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看到?jīng)]有,這上面顯示的就是表不存在....
經(jīng)檢查.....hibernate.cfg.xml中有一個配置是這樣寫的:
<property name="hibernate.hbm2dll">create</property>一看,不對呀,如果要想自動建表的話那應(yīng)該是這樣的啊:
<property name="hibernate.hbm2ddl.auto">create</property>原來是自己少打了.auto啊,千萬要注意,.auto是不能少的,重要的事說三遍:
.auto是不能少
.auto是不能少
.auto是不能少
最后得出的結(jié)論是:
hibernate在沒有手動為數(shù)據(jù)庫創(chuàng)建特定的表的時候,且在配置文件里沒有設(shè)置自動創(chuàng)建表,,這時就會報錯.
完整代碼如下:
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><!-- 設(shè)置數(shù)據(jù)庫的基本連接信息 --><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><!-- 設(shè)定數(shù)據(jù)庫言 --><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 設(shè)置數(shù)據(jù) 庫的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();}}?
轉(zhuǎn)載于:https://www.cnblogs.com/sirab415/p/5751315.html
總結(jié)
以上是生活随笔為你收集整理的关于hibernate中提示can not create table ******的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uva10050-罢工
- 下一篇: 如何使用SSL pinning来使你的i