Java 如何修复Spring数据JPA尝试在不使用@Query的情况下将字符串转换为十进制
当尝试从dba jpa存储库访问Masterkey对象时,会引发数字格式异常。表的主关键字字段为varchar列,实体类为string。 请查看下面的详细信息 实体类Java 如何修复Spring数据JPA尝试在不使用@Query的情况下将字符串转换为十进制,java,mysql,spring-boot,spring-data-jpa,Java,Mysql,Spring Boot,Spring Data Jpa,当尝试从dba jpa存储库访问Masterkey对象时,会引发数字格式异常。表的主关键字字段为varchar列,实体类为string。 请查看下面的详细信息 实体类 @Entity @Table(name = "JP_MasterKey") public class MasterKey { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "masterId") private Lon
@Entity
@Table(name = "JP_MasterKey")
public class MasterKey {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "masterId")
private Long id;
@Column(name = "keyStr")
private String keyStr;
@Column(name = "masterkeyStr")
@NaturalId
private String masterKeyString;
@Column(name = "isbn")
private String isbn;
@ManyToOne
@JoinColumns({@JoinColumn(name = "isbn", insertable = false, updatable = false), @JoinColumn(name = "masterkeyStr", insertable = false, updatable = false)})
private AdoptionIsbnMap adoptionIsbnMap;
@ManyToOne
@JoinColumn(name = "isbn", insertable = false, updatable = false)
private Title title;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getKeyStr() {
return keyStr;
}
public void setKeyStr(String keyStr) {
this.keyStr = keyStr;
}
public String getMasterKeyString() {
return masterKeyString;
}
public void setMasterKeyString(String masterKeyStr) {
this.masterKeyString = masterKeyStr;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public AdoptionIsbnMap getAdoptionIsbnMap() {
return adoptionIsbnMap;
}
public void setAdoptionIsbnMap(
AdoptionIsbnMap adoptionisbnmap) {
this.adoptionIsbnMap = adoptionisbnmap;
}
public Title getTitle() {
return title;
}
public void setTitle(Title title) {
this.title = title;
}
}
表查询
CREATE TABLE `jp_masterkey` (
`masterId` bigint(20) NOT NULL AUTO_INCREMENT,
`masterkeyStr` varchar(20) NOT NULL,
`isbn` varchar(10) DEFAULT NULL,
`keyStr` varchar(20) NOT NULL,
PRIMARY KEY (`masterId`),
UNIQUE KEY `idx_mtkey_keystr` (`masterkeyStr`,`keyStr`),
KEY `keyStr` (`keyStr`) USING BTREE,
KEY `idx_jpmasterkeyisbn` (`isbn`),
KEY `IDX_JP_MASTERKEY_MASTERKEYSTR` (`masterkeyStr`)
) ENGINE=InnoDB AUTO_INCREMENT=21176003 DEFAULT CHARSET=utf8
存储库类
public interface MasterKeyRepository extends CrudRepository<MasterKey,Long> {
Optional<List<MasterKey>> findByMasterKeyString(String masterKeyString);
}
调用时引发异常
masterKeyRepository
.findByMasterKeyString("JP3RKM9LAEVXP")
.get();
org.springframework.dao.InvalidDataAccessApiUsageException: For input string: "JP3RKM9LAEVXP"; nested exception is java.lang.NumberFormatException: For input string: "JP3RKM9LAEVXP"
性质
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.datasource.url =XXXXXXX?serverTimezone=UTC
spring.datasource.username=XXX
spring.datasource.password=XXXX
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
版本:
Spring Boot
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
MySql Driver
<modelVersion>4.0.0</modelVersion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
org.springframework.dao.InvalidDataAccessApiUsageException: For input string: "JP3RKM9LAEVXP"; nested exception is java.lang.NumberFormatException: For input string: "JP3RKM9LAEVXP"
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:374)
at
springboot
org.springframework.boot
spring启动程序父级
2.2.2.1发布
MySql驱动程序
4.0.0
mysql
mysql连接器java
8.0.18
org.springframework.dao.InvalidDataAccessApiUsageException:对于输入字符串:“JP3RKM9LAEVXP”;嵌套异常为java.lang.NumberFormatException:对于输入字符串:“JP3RKM9LAEVXP”
在org.springframework.orm.jpa.EntityManagerFactoryUtils.ConvertJPAAccessExceptionIffailable(EntityManagerFactoryUtils.java:374)上
在
来自
自然ID在默认情况下是不可变的,您不应该提供setter
方法。如果您需要可变的自然标识符,您必须
将@naturaid注释的可变属性设置为true
将
MasterKey
保存到数据库中时,masterId
的值是多少?看起来这是无效的数字,如null
或string
。数据库中的列格式为Sring。大多数主密钥都可以很好地检索。能否将保存到DB中的每个列的值发布到?masterId 20921085 masterkeyStr JP3RKM9LAEVXP isbn 0730305902 keyStr F92GULEQZUCCheck,如果调用的是正确的方法,而不是“findById()”
Spring Boot
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
MySql Driver
<modelVersion>4.0.0</modelVersion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
org.springframework.dao.InvalidDataAccessApiUsageException: For input string: "JP3RKM9LAEVXP"; nested exception is java.lang.NumberFormatException: For input string: "JP3RKM9LAEVXP"
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:374)
at