簡體   English   中英

Map Varchar 列類型為實體 jpa 中的 Integer

[英]Map Varchar column type to Integer in entity jpa

我有舊表,其中一個列的類型是 varchar,但里面有所有數字。 我不想更改表中的數據類型。 我想更改實體中的列數據類型。

在它是字符串之前,現在我將其更改為 Integer 並且 crud 操作工作正常。 這是很好的做法還是有其他方法可以做到? 示例代碼:

前:

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

現在:

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

創建一個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;

您可以通過 getter/setter 對數據庫中的字段進行解析,並將@Transient注釋應用於 integer 屬性。

@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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM