当前位置: 首页 > 知识库问答 >
问题:

通过hibernate插入对象时获取org.hibernate.exception.sqlgrammarexception

师野
2023-03-14

我有两个表1)krs_question_bank 2)krs_options

     CREATE TABLE krs_question_bank (
        question_id INT(11) NOT NULL AUTO_INCREMENT,
        question VARCHAR(500) NOT NULL,
        course_id INT(11) NOT NULL,
        level_id INT(11) NOT NULL,
        PRIMARY KEY (question_id),
        INDEX fk_krs_course_id_course_idx (course_id),
        INDEX fk_krs_level_id_level_idx (level_id),
        CONSTRAINT fk_krs_course_id_course FOREIGN KEY (course_id) REFERENCES krs_course (course_id) ON UPDATE CASCADE ON DELETE CASCADE,
        CONSTRAINT fk_krs_level_id_level FOREIGN KEY (level_id) REFERENCES krs_level (level_id) ON UPDATE CASCADE ON DELETE CASCADE
     )
     COLLATE='utf8_general_ci'
     ENGINE=InnoDB 
     ;
     CREATE TABLE krs_options (
        options_id INT(11) NOT NULL AUTO_INCREMENT,
        option VARCHAR(100) NOT NULL,
        question_id INT(11) NOT NULL,
        answer INT(11) NOT NULL,
        PRIMARY KEY (options_id),
        INDEX fk_krs_question_bank_question_id_idx (question_id),
        CONSTRAINT fk_krs_question_bank_question_id FOREIGN KEY (question_id) REFERENCES krs_question_bank (question_id) ON UPDATE CASCADE ON DELETE CASCADE
     )
     COLLATE='utf8_general_ci'
     ENGINE=InnoDB
     ;
    
     package com.kr.vo;
     import java.util.List;
     import javax.persistence.CascadeType;
     import javax.persistence.Column;
     import javax.persistence.Embedded;
     import javax.persistence.Entity;
     import javax.persistence.FetchType;
     import javax.persistence.GeneratedValue;
     import javax.persistence.Id;
     import javax.persistence.JoinColumn;
     import javax.persistence.OneToMany;
     import javax.persistence.Table;     
     @Entity
     @Table(name="krs_question_bank")
     public class Question{
         @Id
         @GeneratedValue
         @Column(name = "question_id")
         private int questionId;         
         @Column(name = "question")
         private String questionText;         
         @Column(name = "course_id")
         private int course;         
         @Column(name = "level_id")
         private int level;         
         @OneToMany(cascade={CascadeType.ALL})
        @JoinColumn(name="question_id")
         private List<Option> options;     
     //getter and setter methods
    }

    package com.kr.vo;
    import java.util.List;
    import javax.persistence.Column;
    import javax.persistence.Embedded;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.Table;    
    @Entity
    @Table(name="krs_options")
    public class Option{
        @Id
        @GeneratedValue
        @Column(name ="options_id")
        private int optionId;        
        @Column(name = "option")
        private String optionText;        
        @Column(name = "answer")
        private int answer;            
        @ManyToOne
        @JoinColumn(name="question_id", 
                    insertable=false, updatable=false, 
                    nullable=false)
        private Question question;    
        //getter and setter methods
    } 

而我正在调用Session.Save(问题)。生成了Hibernate查询,但..我有以下错误。有什么办法可以解决这个错误吗?

 Hibernate: insert into krs_question_bank (course_id, level_id, question) values (?, ?, ?)
     Hibernate: insert into krs_options (answer, option) values (?, ?)
     Jun 10, 2017 3:54:07 PM org.apache.catalina.core.StandardWrapperValve invoke
     SEVERE: Servlet.service() for servlet [com.kr.servlets.AddQuestion] in context with path [/MyWebApp] threw exception
     org.hibernate.exception.SQLGrammarException: 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 'option) values (1, 'james')' at line 1
        at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)

共有1个答案

邢晗日
2023-03-14

选项是MYSQL Server中的关键字。为您的表使用不同的名称。同样,检查所有MYSQL关键字的名称,并将它们重命名为一些合适的名称。

 类似资料:
  • 4.4. 通过 getattr 获取对象引用 4.4.1. 用于模块的 getattr 4.4.2. getattr 作为一个分发者 你已经知道 Python 函数是对象。 你不知道的是,使用 getattr 函数,可以得到一个直到运行时才知道名称的函数的引用。 例 4.10. getattr 介绍 >>> li = ["Larry", "Curly"] >>> li.pop

  • 我制作了一个自定义方法,该方法应用@Query注释以从 SQL 数据库中提取数据。该方法使用字符串和可分页作为参数。该 Pageable 包含我的分页信息,例如请求的页面、出现次数限制、排序方向和属性。 每当我的 Pageable 传递属性名称进行排序时,Hibernate 都会使用相同的名称在 DB 上查找列,即使我在模型上注释了另一个列名。我在示例查询或派生方法实现方面没有遇到此问题。 我已经

  • 问题内容: 为了避免sql注入,通常在HQL中可以使用 位置参数 和 命名参数 ,因为它在此处进行演示,并且stackoverflow也有示例。我想知道什么时候可以使用哪些步骤。请提供示例代码或有用链接的任何帮助。 还当我们保存对象时 编辑 吗?假设该对象可能具有String变量,并且有人可以为其分配易受攻击的sql查询。 在这种情况下,我们是否应该在分配给对象之前分别检查用户输入?或采取任何其他

  • 我的理解是,默认情况下,Hibernate将所有关系类型的FetchType设置为lazy。 在我的例子中,我有一个双向的OneToMany-ManyToOne关系,如下所示: 另一个问题是我如何得到一个有特定名字的孩子?是否可以通过存储库进行操作?还是需要getChildren(parentId)并迭代直到找到以特定方式命名的那个? 编辑:在一些建议之后,我继续这样实现了我的ChildRepos

  • 我收到以下异常- org.hibernate.exception.sqlgrammarexception:无法插入:[Employee] 以下是详细信息: hibernate.cfg.xml employee.hbm.xml 请帮助解决异常。提前道谢!

  • 问题内容: 我从字符串定义一个新的gson对象: 此处的字符串示例:http : //api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc 然后尝试返回一个值: 最后用: 但是我得到一个错误: 完整班:主班:http : //pastebin.com/v4LrZm6k 无线电班:http : //pastebin.com/2BWwb6eD 问题答案: 这是Java。字段根