2014-12-05 74 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

相关问题