Mysql SpringBootJPA:如何将字段映射到数据类型不固定的列
我有一个包含两个字段的实体类Mysql SpringBootJPA:如何将字段映射到数据类型不固定的列,mysql,hibernate,jpa,spring-data-jpa,spring-boot-jpa,Mysql,Hibernate,Jpa,Spring Data Jpa,Spring Boot Jpa,我有一个包含两个字段的实体类 @Entity(name = "additional_attributes") class AdditionalAttributes { @Id private Integer id; private String attributeName; private Object attributevalue; // getter and setter // manytoone with mandatory table } attribute
@Entity(name = "additional_attributes")
class AdditionalAttributes {
@Id
private Integer id;
private String attributeName;
private Object attributevalue;
// getter and setter
// manytoone with mandatory table
}
attributeValue的数据类型在这里是Object,这意味着该值可以是integer/boolean/float之类的任何值
如何处理此情况以保存正确的值,并在获取时再次获取准确的值(类型为布尔/整数等)?您应该添加
属性类标记字段类属性类。另一种方法是创建enumAttributeType
,并将其用作标记字段
@Entity(name = "additional_attributes")
class AdditionalAttributes {
@Id
private Integer id;
private String attributeName;
Class<?> attributeClass;
String attributevalue;
public void setAttribute(Object attribute){
attributeClass = attribute.getClass()
attributevalue = attribute.toString();
}
}
然后有两种方法:
1)添加到实体或服务类通用属性
public Object getAttribute() throws NumberFormatException {
if(attributeClass == Integer.class) {
return Integer.parseInt(attributevalue);
}
if(attributeClass == Boolean.class) {
return Boolean.parseBoolean(attributevalue);
}
//...
}
用法:
Object attribute = additionalAttributes.getAttribute();
if(additionalAttributes.isIntegerAttribute()) {
Integer integerAttribute = additionalAttributes.getIntegerAttribute();
//...
}
if(additionalAttributes.isBooleanAttribute()) {
Boolean booleanAttribute = additionalAttributes.getBooleanAttribute();
//...
}
2)或使用一对方法获取属性
public boolean isIntegerAttribute() {
return attributeClass == Integer.class;
}
public Integer getIntegerAttribute() throws NumberFormatException {
return Integer.parseInt(attributevalue);
}
public boolean isBooleanAttribute() {
return attributeClass == Boolean.class;
}
public Boolean getBooleanAttribute() {
return Boolean.parseBoolean(attributevalue);
}
//...
用法:
Object attribute = additionalAttributes.getAttribute();
if(additionalAttributes.isIntegerAttribute()) {
Integer integerAttribute = additionalAttributes.getIntegerAttribute();
//...
}
if(additionalAttributes.isBooleanAttribute()) {
Boolean booleanAttribute = additionalAttributes.getBooleanAttribute();
//...
}
我应该在哪里使用parseAttributevalue方法?我不明白你的方法,请解释一下