#java #sql #jpa #persistence #playframework
#java #sql #jpa #сохранение #playframework
Вопрос:
Я пытаюсь сохранить простой объект в базе данных, но у меня возникают проблемы.
Это мой класс object:
@Entity
@Table(name="lines")
public class Line extends GenericModel{
@Id
@Column(name="line_id")
private int id;
@Column(name="line_text")
private String text;
@Column(name="line_postid")
private int postid;
@Column(name="line_position")
private int position;
}
И это то, что у меня есть в моем контроллере:
Line l = new Line();
l.setPosition(0);
l.setPostid(4);
l.setText("geen");
l.save();
Я делаю то же самое для других моделей, и у меня нет проблем, только эта вызывает у меня проблемы. Когда я обновляю браузер, я получаю:
PersistenceException occured : org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
Я также добавил jpa.debugSQL=true
в свою конфигурацию, и в моей консоли я получаю:
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 'lines (line_position, line_postid, line_text, line_id) values (0, 4, 'geen', 0)' at line 1
И браузер также показывает это: This exception has been logged with id 66k3glbb6
но я понятия не имею, где я могу просмотреть свои журналы, так что, если кто-нибудь может сказать мне и это тоже?
Ответ №1:
lines
это зарезервированное слово в MySQL, вам нужно экранировать его следующим образом:
@Table(name="`lines`") // Hibernate way
или
@Table(name=""lines"") // JPA standard way
Ответ №2:
Убедитесь, что для метода сохранения не существует @Transactional(readOnly = true)
🙂