我有一个遗留表,其中其列的类型之一是varchar,但其中包含所有数字。我不想更改表中的数据类型。我想更改实体中的列数据类型。
之前是字符串,现在我将其更改为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
注释应用于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;
}
}
创建一个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;