Java 如何修复Spring数据JPA尝试在不使用@Query的情况下将字符串转换为十进制

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

当尝试从dba jpa存储库访问Masterkey对象时,会引发数字格式异常。表的主关键字字段为varchar列,实体类为string。 请查看下面的详细信息

实体类

@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