将 Varchar 列类型映射到实体 jpa 中的 Integer

Map Varchar column type to Integer in entity jpa

我有遗留的 table,其中一列的类型是 varchar,但里面全是数字。我不想更改 table 中的数据类型。我想更改实体中的列数据类型。

之前它是字符串,现在我将它更改为 Integer 并且 crud 操作工作正常。这是很好的做法还是有其他方法可以做到?示例代码:

之前:

@Entity
public class TestEntity{
    @Column(name = "Test")
    private String test;
}

现在:

@Entity
public class TestEntity{
    @Column(name = "Test")
    private Integer test;
}

您可以通过 getter/setter 为数据库中的字段解析它,并将 @Transient 注释应用于整数 属性。

@Entity
public class TestEntity {
    @Column(name = "test") 
    private  String getTest() {
        return String.valueOf(this.intTest);
    }

    private void setTest(String test) {
        try {
            this.intTest = Integer.parseInt(test);
        } catch (NumberFormatException e) {
            this.intTest = 0;
        }
    }

    @Transient
    private int intTest;

    public int getIntTest() { return intTest; }

    public void setIntTest(int test) {
        this.intTest = intTest;
    }
}

创建一个 AttributeConverter 用于数据库到实体类型的转换

@Converter
public class IntegerToStringConverter implements AttributeConverter < Integer,
 String > {
  @Override
  public String convertToDatabaseColumn(Integer value) {
   return Integer.toString(number);
  }

  @Override
  public Integer convertToEntityAttribute(String number) {
   try {
    return Integer.parseInt(number);
   } catch (Exception e) {
    throw new IllegalStateException("Invalid number: " + value);
   }
  }
 }

并在您的专栏中使用它

@Convert(converter = IntegerToStringConverter.class)
@Column(name = "Test")
private Integer Test;