我是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
答案 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")