2014-09-23 1 views
-1

Я новичок в hibernate, и у меня возникают некоторые незначительные проблемы, к которым я также разместил код, надеясь на некоторые предложения от всех опытные люди там. Я также опубликовал ошибку, которую я получаю.Имея проблемы с hibernate при создании таблицы, он работал нормально до этого, но затем испытывал некоторые проблемы

Это моя модель класса

package com.hibernate.arjun; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class Car_Info { 

    @Column(name = "CarName") 
    private String car_name; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "CarNo") 
    private String car_no; 
    @Column(name = "CarModel") 
    private String car_model; 

    public String getCar_name() { 
     return car_name; 
    } 

    public void setCar_name(String car_name) { 
     this.car_name = car_name; 
    } 

    public String getCar_no() { 
     return car_no; 
    } 

    public void setCar_no(String car_no) { 
     this.car_no = car_no; 
    } 

    public String getCar_model() { 
     return car_model; 
    } 

    public void setCar_model(String car_model) { 
     this.car_model = car_model; 
    } 
} 

Это мой основной класс

package com.hibernate.arjun; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.AnnotationConfiguration; 

public class MainCar { 

    public static void main(String args[]) { 
     Car_Info car_Info = new Car_Info(); 
     car_Info.setCar_name("Ferrari"); 
     car_Info.setCar_model("Italian"); 


     SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory(); 
     Session session = factory.openSession(); 
     session.beginTransaction(); 

     session.save(car_Info); 
     session.getTransaction().commit(); 
     session.close(); 
     factory.close(); 
    } 
} 

и это мой hibernate.cfg.xml

<hibernate-configuration> 

<session-factory> 

    <!-- Database connection settings --> 
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="connection.url">jdbc:mysql://localhost:3306/CarTable</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property> 

    <!-- JDBC connection pool (use the built-in) --> 
    <property name="connection.pool_size">1</property> 

    <!-- SQL dialect --> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

    <!-- Disable the second-level cache --> 
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">true</property> 

    <!-- Drop and re-create the database schema on startup --> 
    <property name="hbm2ddl.auto">create</property> 


    <mapping class="com.hibernate.arjun.Car_Info" /> 

</session-factory> 
</hibernate-configuration> 

я м только CRE живать таблицу из спящего режима, который три колонки, но тогда это ошибка я испытываю

Sep 23, 2014 5:02:36 PM org.hibernate.tool.hbm2ddl.SchemaExport execute 
INFO: HHH000227: Running hbm2ddl schema export 
Hibernate: drop table if exists Car_Info 
Hibernate: create table Car_Info (CarNo varchar(255) not null auto_increment, CarModel varchar(255), CarName varchar(255), primary key (CarNo)) 
Sep 23, 2014 5:02:36 PM org.hibernate.tool.hbm2ddl.SchemaExport perform 
ERROR: HHH000389: Unsuccessful: create table Car_Info (CarNo varchar(255) not null auto_increment, CarModel varchar(255), CarName varchar(255), primary key (CarNo)) 
Sep 23, 2014 5:02:36 PM org.hibernate.tool.hbm2ddl.SchemaExport perform 
ERROR: Incorrect column specifier for column 'CarNo' 
Sep 23, 2014 5:02:36 PM org.hibernate.tool.hbm2ddl.SchemaExport execute 
INFO: HHH000230: Schema export complete 
Hibernate: insert into Car_Info (CarModel, CarName) values (?, ?) 
Sep 23, 2014 5:02:36 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 1146, SQLState: 42S02 
Sep 23, 2014 5:02:36 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: Table 'cartable.car_info' doesn't exist 
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute statement 
    at 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.executeUpdate(ResultSetReturnImpl.java:211) 
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96) 
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3032) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3558) 
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:98) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:490) 
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:195) 
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:179) 
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:214) 
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) 
    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.hibernate.arjun.MainCar.main(MainCar.java:19) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'cartable.car_info' doesn't exist 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) 
    at com.mysql.jdbc.Util.getInstance(Util.java:383) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1062) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4208) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4140) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2597) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2758) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2826) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) 
    ... 22 more 

У меня есть также еще одно сомнение. Нужно ли создавать таблицу раньше в MySql, потому что, когда я использую create в файле cfg.xml, она дает мне ошибку, она автоматически удаляет таблицу, что мне делать?

Спасибо!

+0

<Свойство Имя = «hbm2ddl.auto»> создать установить его для обновления и попробовать –

ответ

2

Ошибка говорит

Incorrect column specifier for column 'CarNo' 

потому, что вы объявили поле String вместо int:

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "CarNo") 
private String car_no; 

Как вы сказали @GeneratedValue(strategy = GenerationType.AUTO) спящий режим предполагается, что поле car_no как число и пытался создать ваша таблица как:

CarNo varchar(255) not null auto_increment 

Здесь вы можете четко видеть, что hibernate пытается включить auto_increment, что неверно для типа данных String. Таким образом, создание таблиц сама потерпела неудачу с ошибкой:

ERROR: HHH000389: Unsuccessful: create table Car_Info (CarNo varchar(255) not null auto_increment, CarModel varchar(255), CarName varchar(255), primary key (CarNo)) 

Чтобы исправить этот вопрос изменить поле для любого типа данных, как int или long и т.д., где auto_increment применимо.

Если вы все еще хотите использовать car_no в String, то вам необходимо использовать стратегию GenerationType.ASSIGNED поколения, которая является стратегией по умолчанию для любых идентификаторов так просто удаление стратегии поколения означает, что необходимо назначить идентификатор вручную в коде перед вызовом session.save(Object) метод.

@Id 
//@GeneratedValue(strategy = GenerationType.ASSIGNED) -- this line is optional 
@Column(name = "CarNo") 
private String car_no; 

Что касается свойств hbm2ddl.auto, когда вы установите его значение в create затем спящий режим автоматически запускает drop команды, а затем создает таблицы при создании SessionFactory. Вы должны установить его значение update, если вы не хотите удалять таблицы каждый раз при запуске приложения.

Обратитесь к этой ссылке для получения более подробной информации о hbm2ddl - Hibernate hbm2ddl.auto possible values and what they do?

+0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Таблица «cartable.car_info» не существует –

+0

@SamwiseGamgee, что делают вы это понимаете? – Chaitanya

+0

Это ошибка, которую вы видите в журнале. –

0

@GeneratedValue(strategy = GenerationType.AUTO) не может быть использован для создания string идентификатора. Если вы хотите использовать string Id затем просто поставить @Id над private String car_no; как,

@Id 
    @Column(name = "CarNo") 
    private String car_no; 

в противном случае изменить тип данных car_no к int.

+0

Thanx alot для ответа и да, я плохой, я понял, что моя ошибка будет держать это в моей голове –

Смежные вопросы