2014-12-05 72 views
0

我有多個JPA轉換器這樣的例子:如何將Object轉換爲轉換器中的特定參數?

@Converter 
public class CurrencyConverter4jpa 
implements AttributeConverter<Currency, String> { 
    @Override 
    public String convertToDatabaseColumn(Currency value) { 
     if (value == null) 
      return null; 
     return value.getCurrencyCode(); 
    } 
    @Override 
    public Currency convertToEntityAttribute(String value) { 
     if (value == null) 
      return null; 
     Currency cur = Currency.getInstance(value); 
     return cur; 
    } 
} 

另一個是UUID轉換爲「二進制(16)」和背部。我將實例化的轉換器存儲在一個字段中:

private Class<?> convClass = CurrencyConverter.class; 
AttributeConverter<?,?> conv = converterClass.newInstance(); 
public void setConverter(Class<?> converterClass) { 
    this.convClass = converterClass; 
    this.conv = converterClass.newInstance(); 
} 

public Object getSQLField(ResultSet rs) { 
    Object value = null; 
    if (conv != null) { 
     value = conv.convertToEntityAttribute(resultSet.getObject(4)); 
    ... 

僅在Java Object中使用此轉換器會導致編譯器錯誤。我試過的是這樣的:

任何想法?

+0

你得到的錯誤是什麼? – John 2014-12-05 11:54:03

+0

錯誤是:類型AttributeConverter 中的方法convertToEntityAttribute(capture#10-of?)不適用於參數(Object) – 2014-12-05 14:05:31

+0

您是什麼意思「我將實例化的轉換器存儲在一個字段中:「發佈您的類使用轉換器 – 2014-12-05 18:20:12

回答

0

.convertToEntityAttribute的參數類型應該是String,並且您發送的是Object。嘗試用resultSet.getString替換resultSet.getObject

+0

爲什麼它應該是一個字符串?在我的轉換器例子的這個特例中,你是對的。但我也有一個UUID和其他幾個轉換器。這就是我使用「對象」的原因。是否有必要建立一個基於列類型的巨大開關? – 2014-12-05 12:02:23

+0

那麼,該方法被聲明爲接受String類型的參數...我想,你需要一個switch語句(或者它的一些等價物),如果你要爲不同的列調用不同的方法,wouldn你呢? 或者,您可以將方法的參數類型更改爲Object,並將其轉換爲函數內部的預期類型。 – Dima 2014-12-05 13:26:33

相關問題