Как решить синтаксическую ошибку SQL, если она генерируется hibernate при попытке сохранить объект в базе данных? - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь сохранить объект с помощью метода session.save () из hibernate.До сих пор все работало хорошо для других классов, но теперь я застрял с этой синтаксической ошибкой SQL, и ничто, что я нашел, не могло помочь до сих пор.Вот результат консоли:

Error update: could not execute statement
May 23, 2019 5:47:26 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: 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 (is_answer, question_id, option_text) values (0, 97, 'asdfaoins')' at line 1

Вот метод из моего класса QuestionDAO:

@Transactional
    public void addQuestionOption(String text, int questionId, boolean isAnswer) {

    QuestionOption newOption = new QuestionOption();

    newOption.setText(text);
    newOption.setQuestionId(questionId);
    newOption.setIsAnswer(isAnswer);

    Configuration con = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(QuestionOption.class);

    SessionFactory sf = con.buildSessionFactory();
    Session session = sf.openSession();

    try {

        Transaction tx = session.beginTransaction();

        session.save(newOption);

        tx.commit();
    } catch (Exception e) {
        System.out.println("Error update: " + e.getMessage());
        session.getTransaction().rollback(); // get
    } finally {
        session.close();
    }

Вот мой класс модели QuestionOption:

@Entity
@Table(name = "option")
public class QuestionOption {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(name = "option_text")
private String text;

@Column(name = "question_id")
private int questionId;

@Column(name = "is_answer")
private boolean isCorrectAnswer;



public QuestionOption(int id, String text, int questionId, boolean isAnswer) {
    super();
    this.id = id;
    this.text = text;
    this.questionId = questionId;
    this.isCorrectAnswer = isAnswer;
}

public QuestionOption() {}

//getters & setters

Иу меня простой вызов:

 QuestionOptionDAO odao = new QuestionOptionDAO();
     odao.addQuestionOption("asdfaoins", 97, false);

Я упоминаю, что могу без проблем вставить в верстак, если просто жестко закодировать некоторые записи.Я также попробовал метод saveOrUpdate().Кроме того, я использую точно такой же метод для других классов, и вставка работает отлично.Любая идея, почему я получаю эту ошибку в этом случае?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Это, вероятно, потому что option является зарезервированным словом в MySQL ...

https://dev.mysql.com/doc/refman/5.5/en/keywords.html#keywords-5-5-detailed-O

Попробуйте назвать ваш стол чем-то другим или попробуйте то, что предлагается здесь ...

https://thoughts -on-java.org / гибернация-советы-спусковые столовые столбцы наименования /

, например

@Entity
@Table("\"Option\"")
public class QuestionOption {
   ...
0 голосов
/ 23 мая 2019

Возможно, вам следует попытаться зарегистрировать оператор SQL, который Hibernate отправляет в БД.

Это описано здесь .

Было бы легче найти проблему, когдаВы вставляете его в клиент SQL (, как HeidiSQL ).Или разместите здесь весь запрос, чтобы мы могли на него взглянуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...