org.springframework.jdbc.BadSqlGrammarException:错误的SQL语法

时间:2014-09-15 23:05:18

标签: sql spring hibernate

我的代码中出现以下错误:

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad 
SQL grammar [insert into bulletins (date, name, subject, note, approved) values 
(?, ?, ?, ?, ?)]; nested exception is com.mysql.jdbc.exceptions.MySQLSyntaxError 
Exception: Unknown column 'date' in 'field list'

这一行在我的Spring控制器中。

bulletinDAO.writeBulletin(bulletin);

我的DAO课程中的实际位置,我尝试使用Hibernate编写。

public void writeBulletin(Bulletin bulletin) {
    try {
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        session.save(bulletin);
        tx.commit();
    } catch (Exception e) {
        System.out.println(e.toString());
    }
}

这是我的模特课。

    @Entity
    @Table(name="login")
    public class Bulletin {
        @Id
        @Column(name="id")
        @GeneratedValue
        private int id;

        @Column(name="bulletin_date")
        private String date;

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

        @Column(name="subject")
        private String subject;

        @Column(name="note")
        private String note;

        @Column(name="approved")
        private boolean approved;

        // Getters and setters follow
}

最后,这是表格的布局。

+---------------+---------------+------+-----+---------+----------------+
| Field         | Type          | Null | Key | Default | Extra          |
+---------------+---------------+------+-----+---------+----------------+
| id            | int(11)       | NO   | PRI | NULL    | auto_increment |
| bulletin_date | varchar(10)   | YES  |     | NULL    |                |
| name          | varchar(30)   | YES  |     | NULL    |                |
| subject       | varchar(50)   | YES  |     | NULL    |                |
| note          | varchar(2500) | YES  |     | NULL    |                |
| approved      | tinyint(1)    | YES  |     | NULL    |                |
+---------------+---------------+------+-----+---------+----------------+

2 个答案:

答案 0 :(得分:0)

您的问题就在这里 [插入公告(日期,姓名,主题,注释,已批准)]

而你需要bullletin_date。

根据经验,我需要完全重建项目以确保引用正确的列名。

清除项目缓存并重建它。

让我知道你如何去,如果它没有帮助我会进一步提供帮助。

答案 1 :(得分:0)

你的getter和setter一定有问题。

我建议将属性名称从date更改为bulletinDate。然后设置&搞定......

 @Column(name="bulletin_date")
 private String bulletinDate;

 public String getBulletinDate() {
    return bulletinDate;
 }
 public void setBulletinDate(String bulletin_date) {
    this.bulletinDate = bulletin_date;
 }