第三章使用JPA后出现的问题和解决方案

  1. 请求design页面时出现如下错误
java.lang.NumberFormatException: For input string: "PROTEIN"
    at java.base/java.lang.Double.parseDouble(Double.java:543) ~[na:na]
......
......
    at com.dcf.Controller.DesignTacoController.showDesignForm(DesignTacoController.java:65) ~

可以看到错误发生在试图读取Ingredients信息的时候出现错误,原因是无法将字符串转为double类型,这主要是因为在Entity类中使用了枚举类型;

搜索之后了解到Enum类型字段的映射有两种方式:
1.通过使用Enum类型实例在Enum中声明的顺序,也就是ordinal属性;
2.通过使用Enum类型实例中的name属性来完成映射,Enum类型映射成String类型来完成存储;

解决方案是添加注解如下:

 @Enumerated(EnumType.STRING)
    private final Type type;

    public static enum Type {
        WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
    }

具体方式参见: https://blog.csdn.net/qq_38157516/article/details/80540505.

2. 提交design表单时出错

java.sql.SQLSyntaxErrorException: Unknown column 'created_at' in 'field list'
	......
	......
	at com.dcf.Controller.DesignTacoController.processDesign(DesignTacoController.java:65)

提示无法找到created_at属性,在idea软件中搜索未发现显式配置过这个属性,猜测可能是JPA在自动解析时出现问题,并且这个字段是驼峰命名法,百度之后发现JPA在遇到大写字母后会添加下划线(与数据库字段命名惯例相同)找到两种解决方案:
1.加上@Column(name=“createdat”),但@Column(name=“createdAt”)不可以;
2.在application.properties中加上下面两行;

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

具体原因参见: https://www.jianshu.com/p/fc2c79814956.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值