Spring @Cacheable с ключом SpEL: всегда имеет значение null

У меня проблема с @Cacheable и использованием пользовательского ключа на основе языка выражений Spring. У меня есть следующий код

@Cacheable(value = "myCache", key = "#providerDTO.identifier")
ClientVO loadClientVOByProviderDTO(ProviderDTO providerDTO);

Это вызывает следующую ошибку

org.springframework.expression.spel.SpelEvaluation Exception: EL1007Epos 0): Field or property 'identifier' cannot be found on null

Аргумент providerDTO не равен нулю, я проверял это много раз. Документы говорят, что это должно работать, поэтому я очень смущен. Документы дают следующий пример

@Cacheable(value="books", key="#isbn.rawNumber")

Я также пробовал статический метод. Это вызывает исключение NullPointerException, потому что providerDTO здесь имеет значение null.

public static String cacheKey(ProviderDTO providerDTO)                                                                                                                                                                                                                    
{                                                                                                                                                                                                                                                                         
    return providerDTO.identifier + "-" + providerDTO.clientID + "-" + providerDTO.clubID;                                                                                                                                                                            
}

Как я могу отладить это, чтобы узнать, что происходит? Это Spring 3.2.4-RELEASE. Тег @Cacheable находится на интерфейсе, но я использую стандартный Spring AOP, а не AspectJ, поэтому, насколько я понимаю, это должно работать нормально.


person Collin Peters    schedule 09.08.2013    source источник
comment
Просто для протокола: Кэш работает без генерации кастомного ключа? Вы отметили конкретную реализацию, а не интерфейс?   -  person micfra    schedule 19.08.2013


Ответы (1)


Возможный дубликат SpelEvaluationException: EL1007E:(pos 43): Поле или свойство "группа" не может быть найдено в null и spring @Cacheable с Ehcache, найдите null для действительного объекта - я полагаю, что вы компилируете без отладочной информации. Пожалуйста, проверьте конфигурацию Maven; вы можете опубликовать соответствующие биты здесь. Найдите в своем POM (или родительском POM) maven-compiler-plugin и строку, например:

<debug>false</debug>
person Michael Piefel    schedule 19.06.2014