Spring MVC JPA异常org.hibernate.exception.SQLGrammarException

时间:2014-11-20 07:31:51

标签: java mysql spring jpa

我是Spring JPA的新手。我现在正在学习。尝试在mysql数据库中插入数据时出现了奇怪的错误。

我确保我的表和数据库设置正确与我的

相同
mysql> show columns in empolyee in test;


| Field | Type        | Null | Key | Default | Extra          |

| id    | int(6)      | NO   | PRI | NULL    | auto_increment | 
  eid   | int(6)      | YES  |     | NULL    |                |
| name  | varchar(40) | NO   |     | NULL    |                |
| role  | varchar(20) | YES  |     | NULL    |                |

我的实体类: -

      @Entity
     public class Employee extends AbstractPersistable<Long> {

    private int eid;
    private String name;
    private String role;

    public Employee(){

    }

    public Employee(int aeid, String aname, String arole){
        eid=aeid;
        name = aname;
        role = arole;
       }
     }

错误: -

 HTTP Status 500 - Request processing failed; nested exception is  org.springframework.orm.jpa.JpaSystemException: org.hibernate.exception.SQLGrammarException: Table 'test.employee' doesn't exist; 
nested exception is javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: 
Table 'test.employee' doesn't exist

3 个答案:

答案 0 :(得分:1)

您在数据库中的表名是empolyee

@Entity
public class Employee extends AbstractPersistable<Long>

这里您没有指定@Table注释,因此JPA将表名作为类名,即Employee,它不存在于您的数据库中。因此改变这个

@Entity
@Table(name="empolyee")  //this exists in database
public class Employee extends AbstractPersistable<Long>

答案 1 :(得分:0)

MySQL表名的区分大小写取决于操作系统:

  

在MySQL中,数据库对应于数据中的目录   目录。数据库中的每个表对应至少一个   数据库目录中的文件(可能更多,取决于   存储引擎)。因此,案例的敏感性   底层操作系统在案例敏感性中发挥作用   数据库和表名。这意味着数据库和表名不是   Windows中区分大小写,大多数情况下区分大小写   Unix的。一个值得注意的例外是Mac OS X,它基于Unix但使用   一个不区分大小写的默认文件系统类型(HFS +)。然而,   Mac OS X还支持UFS卷,它们区分大小写   在任何Unix上。

因此,您需要在正确的情况下设置表名:

 @Entity @Table(name = "empolyee")
 public class Employee extends AbstractPersistable<Long>  { ... }

答案 2 :(得分:0)

将您的实体类注释更改为以下。

@Entity
@Table(name="empolyee")