2011-03-19 101 views
0

創建會話工廠在這裏:休眠無法插入

public class DBUtil { 
    private static SessionFactory sessionFactory; 
    static{ 
     try{ 
      Configuration configuration = new Configuration() 
      .setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver") 
      .setProperty("hibernate.connection.url", "jdbc:mysql://localhost/hibtut") 
      .setProperty("hibernate.connection.username", "root") 
      .setProperty("hibernate.connection.password", "") 
      .setProperty("hibernate.c3p0.min_size", "5") 
      .setProperty("hibernate.c3p0.max_size", "10") 
      .setProperty("hibernate.c3p0.timeout", "1800") 
      .setProperty("hibernate.c3p0.max_statements", "50") 
      .setProperty("hibernate.show_sql", "true") 
      .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect") 
      .setProperty("hibernate.hbm2ddl.auto", "update"); 
      configuration.addAnnotatedClass(MenuDHO.class); 
      sessionFactory = configuration.buildSessionFactory(); 
     } catch (Throwable e) { 
      throw new ExceptionInInitializerError(e); 
     } 
    } 
    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
    public static void shutDown() { 
     getSessionFactory().close(); 
    } 
} 

Menudho.class是在這裏:

package com.pra.shasoc.dho; 

import java.io.Serializable; 

import javax.persistence.*; 

import org.hibernate.annotations.GenericGenerator; 

@Entity 
@Table(name="menu") 
public class MenuDHO implements Serializable{ 

@Id 
@Column(name = "ID") 
private int id; 

@Column(name="Name") 
private String name; 

@Column(name="Order") 
private int order; 
public MenuDHO() { 
} 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public int getOrder() { 
    return order; 
} 
public void setOrder(int order) { 
    this.order = order; 
} 
} 


public class MenuReader { 
public static void main(String[] args) { 
    DBUtil dbUtil = new DBUtil(); 
    SessionFactory sessionFactory = dbUtil.getSessionFactory(); 
    Session session = sessionFactory.openSession(); 
    Transaction transaction = session.beginTransaction(); 
    MenuDHO menuDHO = new MenuDHO(); 
    menuDHO.setId(5); 
    menuDHO.setName("New Menu"); 
    menuDHO.setOrder(15); 
    session.save(menuDHO); 
    transaction.commit(); 
} 
} 

我得到以下異常:

請幫助

log4j:WARN No appenders could be found for logger (org.hibernate.type.BasicTypeRegistry). 
log4j:WARN Please initialize the log4j system properly. 
Hibernate: insert into menu (Name, Order, ID) values (?, ?, ?) 
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update 
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:92) 
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268) 
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184) 
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) 
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) 
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) 
    at com.pra.shasoc.helpers.MenuReader.main(MenuReader.java:18) 
Caused by: java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order, ID) values ('New Menu', 15, 5)' at line 1 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2024) 
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1449) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723) 
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
    ... 8 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Order, ID) values ('New Menu', 15, 5)' at line 1 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:407) 
    at com.mysql.jdbc.Util.getInstance(Util.java:382) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415) 
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1976) 
    ... 12 more 

回答

4

你不能使用「訂單」(案例在sql中無關緊要)作爲列名,因爲它是一個保留字(ORDER BY)。

+0

感謝Riccardo救援... – user646108 2011-03-19 10:52:17