java - Hibernate 无法在不重命名的情况下保存实体

标签 java mysql hibernate

我有一个很奇怪的问题,我不明白这是什么原因。

我试图保存只有 1 个字段 (@id groupName)、getter 和 setter 的简单对象 (Group.class)。 当我尝试运行我的程序时,出现异常:

Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update at

...

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 'Group (groupName) values ('Test')' at line 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.*;

组.类

@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();
    }

}

主类

public class Main {

    public static void main(String[] args) {


        DataSender ds = new DataSender();

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

    }
}

最佳答案

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

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

关于java - Hibernate 无法在不重命名的情况下保存实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43573224/

相关文章:

java - JBoss 服务器 7.1 未在 Eclipse Luna 中启动

java - 对于包含名为 "Node"的类的 JNI C++ 代码,JVM 无法按预期工作

java - 尽管 EnumMap 未同步,但它如何安全地失败

php - MySql 随机化最后 10 行

java - 输出文本文件中最长的单词

mysql - 运行 10,000 个查询每个更新一行更快,还是运行 100 个查询每个更新 100 行更快?

mysql - 错误 1064 mysql (42000) 在 `if then ; else ; end if` 中省略分号时

mysql - 生成模式查询以在本地为 Spring MVC 项目设置 mysql 数据库

java - 当事务更新数千个实体时如何避免 StaleObjectStateException?

hibernate - 在 hibernate 中设置 session 或事务的超时