关于使用Spring Data Jpa遇到的问题

废话不多说,两个问题:自动创建表、大小写敏感。

原因

由于之前一直没有使用过Spring Data JPA作为dao框架去开发,这次公司新建了个项目,这个项目dao的框架使用的刚好是JPA,但因为不熟悉,所以在开发过程中遇到了一些问题,记录一下。

问题及解决办法

自动创建表

在初步了解如何使用JPA之后,使用了@Entity注解和@Table注解将表和实体类映射好之后,按照以前使用mybatis的逻辑,我先创建了表,不过表名和表字段都是大写的。
然后启动服务,ok,服务启动没问题。but!当我想到数据库中看数据时,发现多了几张表,what?在咨询没有哪位同事创建表之后,我怀疑是JPA自动创建的,网上查了一下,JPA确实有配置项会自动创建表。。。
配置文件中的配置项如下:

spring.jpa.database=MySQL
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

其中spring.jpa.hibernate.ddl-auto这个参数如果配置为update,则每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新。
我开始以为因为这个配置项,服务启动之后就会创建新表,因此,将配置修改为如下:

spring.jpa.database=MySQL
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
#spring.jpa.hibernate.ddl-auto=update

大小写敏感

发现了上面的坑之后,没多想,直接把配置项注释掉,删除多余的表,重启。
结果在调用的时候报错了,说找不到对应的表名:

Caused by: java.sql.SQLSyntaxErrorException: Table 'test.test' doesn't exist
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
	... 128 common frames omitted

这就奇怪了,我已经创建了TEST表啊,为什么找不到。
仔细看了下错误,发现表名是小写的?难道是大小写敏感问题?
又到网上查了下,发现确实有这个问题。需要加新的配置项才开启大小写敏感。。。
大小写敏感的配置项:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

OK,这次启动没创建新表,调用的时候也不报错。

感觉主要的问题还是因为大小写敏感没有开启,如果数据库涉及的时候,表名和字段名都是大写,那就需要开启JPA的大小写敏感开关。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值