2017-04-23 87 views
1

我有一个很奇怪的问题,我无法理解它的原因。休眠无法保存实体,无需重命名

我试图用只有1个字段(@id groupName),getter和setter保存简单的对象(Group.class)。 当我尝试运行我的程序,我有一个例外:在线程“主要” org.hibernate.exception.SQLGrammarException

异常:无法在

...

执行JDBC 批量更新

引起︰java.sql.BatchUpdateException︰您在您的SQL语法中有一个错误,您的 SQL语法;检查对应于你的MySQL服务器 版本使用附近的正确语法手册“集团(组名)值 (”测试“)”在1号线

但是,如果我指定实体的名称(不同的团体)一切正常。 你能解释一下我做错了什么吗?

代码:

的hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">root</property> 
     <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">create</property> 

     <mapping class="com.globallogic.dto.Group"></mapping> 


    </session-factory> 

</hibernate-configuration> 

import javax.persistence.*; 

Group.class

@Entity //this doesn't work 
//@Entity(name = "SomeName") // this works good 
public class Group { 

    @Id 
    private String groupName; 

    public void setGroupName(String groupName) { 
     this.groupName = groupName; 
    } 
    public String getGroupName() { 
     return groupName; 

    } 

} 

DataSender.class

public class DataSender { 
    private SessionFactory sessionFactory; 
    public DataSender() { 
     sessionFactory = new Configuration().configure() 
       .buildSessionFactory(); 
    } 
    public void sendData(Object... objects) { 
     Session session = sessionFactory.openSession(); 
     if (session.isConnected()) { 

      System.out.println("ALL IS GOOD"); 
      session.beginTransaction(); 

      for (Object user: objects) { 
       session.persist(user); 
      } 
      System.out.println(); 
      session.getTransaction().commit(); 
      session.close(); 
      System.out.println("Connection is closed"); 
     } 

     sessionFactory.close(); 
    } 

} 

Main.class

public class Main { 

    public static void main(String[] args) { 


     DataSender ds = new DataSender(); 

     Group group = new Group(); 
     group.setGroupName("Test"); 
     ds.sendData(group); 

    } 
} 

回答

1

Group是一个SQL关键字,你需要quote your table name

@Entity 
@Table(name = "`Group`") 
public class Group { 
    .... 
+0

Ermmm ..好吧,谢谢你(当我手动创建组表,使用MySQL工作台,它工作正常) – Limmy

+0

它可能是MySQL工作台会自动引用标识符。 –