- 请求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