Вы должны добавить attribute
поле маркера класса Class<?> attributeClass
. Другой подход заключается в создании 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();
}
}
Для установки атрибута используйте это:
Integer integerAttribute = 100;
additionalAttributes.setAttribute(integerAttribute);
Boolean booleanAttribute = true;
additionalAttributes.setAttribute(booleanAttribute);
, и тогда есть два подхода:
1) Добавить к общему объекту или классу обслуживания attribute
parcer
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();
2) Или используйте пару методов, чтобы получить attribute
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);
}
//...
Использование:
if(additionalAttributes.isIntegerAttribute()) {
Integer integerAttribute = additionalAttributes.getIntegerAttribute();
//...
}
if(additionalAttributes.isBooleanAttribute()) {
Boolean booleanAttribute = additionalAttributes.getBooleanAttribute();
//...
}