在使用Spring Data JPA时,一不小心就会出现java.sql.SQLDataException: Cannot determine value type from string xxx
的bug,这个问题是由于实体类与数据库表之间的映射出现不一致。通产有以下几种情况:
- 数据库字段与实体类属性名不一致
- 数据库字段与实体类属性类型不一致
- 实体类中属性为枚举或其他实体类
对于以上第一或第二种情况,只需要修改属性名或属性类型即可。如果是由于使用了枚举而导致该问题的出现,则可通过以下两种方式:
一、使用@Enumerated(EnumType.STRING)
由于枚举中默认使用的是@Enumerated(EnumType.ORDINAL),所以该属性则在数据库中将以int(11)
进行存储。所以,如果数据库中的是char或varchar,则需要在属性上添加注解@Enumerated(EnumType.STRING)
,如:
- POJO
@Enumerated(EnumType.STRING)
private SexType sex;
- enum
public enum SexType {
M("男"),
F("女“);
// 此处省略其他方法
}
注意:该枚举中的name必须和数据库中的值一致才可以使用该注解。如上,只有在数据表中sex的值为
M
和F
才可以使用上面方法,如果数据表中为‘男’和