将 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;
我有遗留的 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;