Конвертер атрибутов JPA 2.1 convert enum все еще вставляет int

Я использую Spring Data JPA с Hibernate в качестве провайдера. я пытаюсь сохранить свои перечисления в varchar(enum.tostring) вместо (0,1,2) моего класса перечисления:

public enum MagasinType {
PRINCIPAL {
    @Override
    public String toString() {
        return "Principale".toUpperCase();
    }
},
SECONDARY {
    @Override
    public String toString() {
        return "Secondaire".toUpperCase();
    }
},
MOBILE {
    @Override
    public String toString() {
        return "Mobile".toUpperCase();
    }
};
public abstract String toString();
}

мой конвертер

@Converter(autoApply = true)
public class MagasinConverter implements attributeConverter           <MagasinType,String>{

@Override
public String convertToDatabaseColumn(MagasinType magasinType) {
    switch (magasinType){
        case MOBILE:return "MOBILE";
        case PRINCIPAL:return "PRINCIPAL";
        case SECONDARY:return "SECONDARY";
        default:throw new IllegalArgumentException("valeur incorrecte" + magasinType);
    }
}

@Override
public MagasinType convertToEntityAttribute(String s) {
    switch (s){
        case "MOBILE": return MagasinType.MOBILE;
        case "SECONDARY": return MagasinType.SECONDARY;
        case "PRINCIPAL": return MagasinType.PRINCIPAL;
        default:throw new IllegalArgumentException("valeur incorrecte" + s);
    }}}

моя сущность

 @Entity
 @Table(name = "MAGASIN")
 public class Magasin extends AbstractEntity {

@Column(name = "LIBELLE", nullable = false)
private String libelle;

@Column(name = "DESCR")
private String descr;


@Convert(converter = MagasinConverter.class)
private MagasinType type;

@Column(name = "LOCATION")
private String localisation;

@Version
private long version;
//getters setters omitted
}

моя конфигурация Java: https://gist.github.com/anonymous/480ef7a58cdcc50e7481

мои app.properties: https://gist.github.com/anonymous/685eaca98fcba9c33872

и, наконец, мой метод тестирования: https://gist.github.com/anonymous/8bb60fee39a201558e19

пожалуйста, помогите мне в этом, я хочу использовать @convert новую функцию jpa2.1 вместо @enumerated


person dzgeek    schedule 01.05.2015    source источник
comment
Итак, вы хотите использовать toString() перечисления или его имя? Ваш текст говорит, что вы хотите toString(), но ваш код говорит, что вам нужно имя. И с какой проблемой вы столкнулись? Что происходит конкретно? Кроме того, почему бы вам не опубликовать настоящий код, который компилируется?   -  person JB Nizet    schedule 01.05.2015
comment
@JBNizet Я реализовал tostring для получения строкового значения, и он работает, например, в журнале или sys.out.print. но когда я сохраняю объект, сначала создайте столбец как INT, а сохраненные значения равны 1.2.3, я хочу, чтобы значение tostring сохранялось. также это реальный код, который компилируется, это мой репозиторий, который вы можете проверить на github.com/zirconias/RFID_REWRITE   -  person dzgeek    schedule 01.05.2015
comment
Стандартный класс не имеет имени attributeConverter. Классы всегда начинаются с заглавной буквы. И ваш преобразователь никогда не вызывает toString(): он возвращает MOBILE для перечисления MOBILE и делает то же самое для других членов перечисления. Поэтому, если это то, что вы хотите, все, что вам нужно, это аннотировать поле в сущности с помощью @Enumerated(STRING)   -  person JB Nizet    schedule 02.05.2015
comment
@JBNizet для attributeConverter это с A, просто я пропустил a и переписал его снова, спасибо за комментарий, и именно поэтому я пытаюсь следовать соглашениям и стандартам, я знаю, что @enumerated(enumtype.string) будет работать , я уже упоминал об этом. Я изучаю весну и пытаюсь протестировать все новые версии java ee7 и jpa 2.1 (по крайней мере, стараюсь изо всех сил). в моем следующем комментарии я опубликую решение, не могли бы вы попытаться объяснить его? у меня не получилось но работает   -  person dzgeek    schedule 02.05.2015


Ответы (1)


Я попытался поместить аннотацию в геттер, и это работает.

теперь я могу вызвать @convert для преобразования перечислений в строки и наоборот при извлечении из базы данных.

та же проблема возникла, когда я добавил @manytoOne в свой атрибут класса, у меня возникла проблема, столбец не был добавлен в сущность таблицы.

но когда я прокомментировал геттер. все было в порядке. пожалуйста, взгляните на мой репозиторий github для получения дополнительной информации

https://github.com/zirconias/RFID_REWRITE

person dzgeek    schedule 01.05.2015
comment
эта фиксация устранила мою проблему github.com/zirconias/RFID_REWRITE/commit/ - person dzgeek; 02.05.2015