Я использую 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
attributeConverter
. Классы всегда начинаются с заглавной буквы. И ваш преобразователь никогда не вызывает toString(): он возвращает MOBILE для перечисления MOBILE и делает то же самое для других членов перечисления. Поэтому, если это то, что вы хотите, все, что вам нужно, это аннотировать поле в сущности с помощью@Enumerated(STRING)
- person JB Nizet   schedule 02.05.2015