Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SpringBootJPA:如何将字段映射到数据类型不固定的列_Mysql_Hibernate_Jpa_Spring Data Jpa_Spring Boot Jpa - Fatal编程技术网

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之类的任何值


如何处理此情况以保存正确的值,并在获取时再次获取准确的值(类型为布尔/整数等)?

您应该添加
属性
类标记字段
类属性类
。另一种方法是创建enum
AttributeType
,并将其用作标记字段

@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方法?我不明白你的方法,请解释一下