2014-10-01 3 views
4

Я тестирую новые преобразователи типа JPA 2.1. Я хочу, чтобы значения NULL String не сохранялись в устаревшей базе данных, поскольку они не разрешены. Поэтому я определил следующий конвертер:JPA 2.1 Тип Преобразователь не получает выполнение по значениям NULL

@Converter(autoApply=true) 
public class CString implements AttributeConverter<String, String> { 

    @Override 
    public String convertToDatabaseColumn(String str) { 
     if(str == null || str.length() == 0) { 
      return " "; 
     } else { 
      return str; 
     } 
    } 

    @Override 
    public String convertToEntityAttribute(String str) { 
     if(str == null || str.length() == 0 || str.equals(" ")) { 
      return null; 
     } else { 
      return str; 
     } 
    } 

} 

Свойство строки должно быть преобразовано в символ пробела, если они являются NULL, но метод преобразователя не выполняется, когда свойства NULL.
Я пытаюсь hibernate-jpa-2.1-api (1.0.0.Final) и hibernate-entitymanager (4.3.6.Final).
Есть ли какой-либо JPA 2.1-совместимый способ обойти это?

+0

Я обновил свой ответ, чтобы отразить последний статус этой проблемы в Hibernate JIRA. Не стесняйтесь принять ответ @Manuel Z –

ответ

2

UPDATE: эта ошибка была решена в последней Hibernate 5.0.0.Beta1 в рамках JIRA выпуска HHH-8697 и будет в Hibernate 4.3.9, как только он выйдет из 4.3.9-SNAPSHOT версии

Если вы не» t хотите перейти на бета-версию, вы можете использовать обходной путь: взгляните на JPA/Hibernate map null, в котором объясняется использование геттера и сеттера для реализации вашей логики.

Смежные вопросы