我嘗試使用EclipseLink的Converter將Enum轉換爲BigDecimal。轉換工作,但生成的數據庫列有一種類型的字符串。是否可以設置參數,EclipseLink在數據庫中構建小數列類型?EclipseLink將Enum轉換爲BigDecimal
我使用了一個類,它實現了org.eclipse.persistence.mappings.converters.Converter。
應用服務器日誌
默認表生成器無法找到或轉換爲Java類型(空)到數據庫字段(XYZ)的數據庫類型。生成器使用java.lang.String作爲字段的默認Java類型。
此消息是針對使用轉換器的每個字段生成的。我如何爲這些字段定義特定的數據庫類型?
public enum IndirectCosts {
EXTENDED {
public BigDecimal getPercent() {
return new BigDecimal("25.0");
}
},
NORMAL {
public BigDecimal getPercent() {
return new BigDecimal("12.0");
}
},
NONE {
public BigDecimal getPercent() {
return new BigDecimal("0.0");
}
};
public abstract BigDecimal getPercent();
public static IndirectCosts getType(BigDecimal percent) {
for (IndirectCosts v : IndirectCosts.values()) {
if (v.getPercent().compareTo(percent) == 0) {
return v;
}
}
throw new IllegalArgumentException();
}
}
數據庫必須存儲數值。我用這樣的轉換器:
public class IndirectCostsConverter implements Converter {
@Override
public Object convertObjectValueToDataValue(Object objectValue, Session session) {
if (objectValue == null) {
return objectValue;
} else if (objectValue instanceof IndirectCosts) {
return ((IndirectCosts) objectValue).getPercent();
}
throw new TypeMismatchException(objectValue, IndirectCosts.class);
}
@Override
public Object convertDataValueToObjectValue(Object dataValue, Session session) {
if (dataValue == null) {
return dataValue;
} else if (dataValue instanceof String) {
return IndirectCosts.getType(new BigDecimal((String) dataValue));
}
throw new TypeMismatchException(dataValue, BigDecimal.class);
}
@Override
public boolean isMutable() {
return false;
}
@Override
public void initialize(DatabaseMapping databaseMapping, Session session) {
}
}
在convertDataValueToObjectValue(Object
我必須使用String
因爲SQL生成器定義的數據庫列爲varchar(255)。我想要十進制(15,2)或其他東西。
非常感謝 安德烈