Spring Data JDBC中@Table注解引发JdbcSQLSyntaxErrorException的原因
问题原因
这是H2数据库的标识符大小写规则和JPA注解交互导致的问题,具体拆解:
H2的表名存储逻辑:当你执行
create table Book_Author创建表时,因为表名没有用双引号包裹,H2会自动将所有未加引号的标识符转换为大写存储,所以数据库里实际存在的表名是BOOK_AUTHOR。@Table注解的SQL生成问题:当你给实体类标注
@Table("Book_Author")时,JPA(比如Hibernate)在生成SQL语句时,会把这个大小写混合的表名用双引号括起来(可能是因为全局配置了强制引号标识符,或是识别到名字包含大小写自动添加引号)。此时H2会严格按照大小写查找表,而数据库里只有大写的BOOK_AUTHOR,自然会抛出表不存在的异常。无@Table时正常的原因:不指定@Table注解时,JPA默认会将实体类名
BookAuthor转换为蛇形命名book_author,H2再自动转成大写BOOK_AUTHOR,刚好和数据库里的实际表名匹配,所以能正常操作。
内容的提问来源于stack exchange,提问作者mihhha
相关产品推荐
相关产品推荐

