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

问题描述 投票:0回答:2

我有一个遗留表,其中其列的类型之一是varchar,但其中包含所有数字。我不想更改表中的数据类型。我想更改实体中的列数据类型。

之前是字符串,现在我将其更改为Integer,并且crud操作运行良好。这是做的很好还是有其他解决方法?示例代码:

之前:

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

现在:

@Entity
public class TestEntity{
    @Column(name = "Test")
    private Integer test;
}
java hibernate jpa spring-data hibernate-mapping
2个回答
0
投票

您可以通过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;
    }
}

0
投票

创建一个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;
© www.soinside.com 2019 - 2024. All rights reserved.