【问题标题】:SQL Error: 1064 HibernateSQL 错误:1064 休眠
【发布时间】:2015-03-26 12:17:40
【问题描述】:

这是我的 Character 类:

package webgame.model;

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

@Entity
@Table(name = "character")
public class Character {

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

    @Column(name = "nivel")
    private int nivel;

    @Column(name = "experiencia")
    private int experiencia;

    @Column(name = "fuerza")
    private float fuerza;

    @Column(name = "inteligencia")
    private float inteligencia;

    @Column(name = "aguante")
    private float aguante;

    @Column(name = "agilidad")
    private float agilidad;

    @Column(name = "suerte")
    private float suerte;

    @Column(name = "dinero")
    private float dinero;

    public Character() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getNivel() {
        return nivel;
    }

    public void setNivel(int nivel) {
        this.nivel = nivel;
    }

    public int getExperiencia() {
        return experiencia;
    }

    public void setExperiencia(int experiencia) {
        this.experiencia = experiencia;
    }

    public float getFuerza() {
        return fuerza;
    }

    public void setFuerza(float fuerza) {
        this.fuerza = fuerza;
    }

    public float getInteligencia() {
        return inteligencia;
    }

    public void setInteligencia(float inteligencia) {
        this.inteligencia = inteligencia;
    }

    public float getAguante() {
        return aguante;
    }

    public void setAguante(float aguante) {
        this.aguante = aguante;
    }

    public float getAgilidad() {
        return agilidad;
    }

    public void setAgilidad(float agilidad) {
        this.agilidad = agilidad;
    }

    public float getSuerte() {
        return suerte;
    }

    public void setSuerte(float suerte) {
        this.suerte = suerte;
    }

    public float getDinero() {
        return dinero;
    }

    public void setDinero(float dinero) {
        this.dinero = dinero;
    }
}

还有我的 BD:

我正在使用 Spring,当我进入路径“/”时,我执行了插入,但我得到了:

SQL Error: 1064, SQLState: 42000
2015-03-26 13:09:20.050 ERROR 5764 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : 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 'character (agilidad, aguante, dinero, experiencia, fuerza, inteligencia, nivel, ' at line 1

这就是我调用插入的方式:

@RequestMapping(value="/", method = RequestMethod.GET)
public String indexForm(Model model) {

    Character c = new Character();
    c.setNivel(1);
    c.setExperiencia(2);
    c.setFuerza(5);
    c.setInteligencia(10);
    c.setAguante(5);
    c.setAgilidad(3);
    c.setSuerte(2);
    c.setDinero(100);

    Session session = HibernateUtil.getSession();
    session.beginTransaction();
    session.save(c);
    session.getTransaction().commit();
    session.close();


    return "index";
}

我有搜索,但我认为我没有 sql 保留关键字。

【问题讨论】:

    标签: mysql sql hibernate


    【解决方案1】:

    CHARACTER 是一个reserved word。如果要使用此类词命名 SQL 对象,则必须确保它们被适当地引用。

    Pascal Thivent's excellent answer 适配为Creating field with reserved word name with JPA

    使用 Hibernate 作为 JPA 1.0 提供者,您可以通过将保留关键字括在反引号中来对其进行转义:

    @Table(name = "`character`")
    

    这是继承自 Hiberate Core 的语法:

    5.4. SQL quoted identifiers

    你可以强制 Hibernate 引用 生成的 SQL 中的标识符 将表或列名包含在 映射文档中的反引号。 Hibernate 将使用正确的 SQL 方言的引用样式。 这通常是双引号,但 SQL Server 使用括号和 MySQL 使用反引号。

    <class name="LineItem" table="`Line Item`">
        <id name="id" column="`Item Id`"/><generator class="assigned"/></id>
        <property name="itemNumber" column="`Item #`"/>
        ...
    </class>
    

    在 JPA 2.0 中,语法被标准化为:

    @Table(name="\"character\"")
    

    参考文献

    相关问题

    【讨论】:

      【解决方案2】:

      更改您的表名和列名。例如:将 'Nombre' 更改为 'nombre' 。 (删除所有列中的大写字母)。

      【讨论】:

        猜你喜欢
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 2016-08-06
        • 2014-02-20
        相关资源
        最近更新 更多