Java JPA 2.1属性转换器转换枚举仍然插入int

Java JPA 2.1属性转换器转换枚举仍然插入int,java,spring-data,spring-data-jpa,jpa-2.1,Java,Spring Data,Spring Data Jpa,Jpa 2.1,我使用SpringDataJPA和hibernate作为提供者。 我正在尝试在varcharenum.tostring而不是0,1,2上持久化我的枚举 我的枚举类: public enum MagasinType { PRINCIPAL { @Override public String toString() { return "Principale".toUpperCase(); } }, SECONDARY { @Override pu

我使用SpringDataJPA和hibernate作为提供者。 我正在尝试在varcharenum.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);
    }}}
我的java配置:

我的app.properties:

最后是我的测试方法:

请帮助我,我想使用@convert new jpa2.1功能,而不是
@enumerated

我尝试将注释放在getter上,它可以工作

现在我可以调用@convert将枚举转换为字符串,并在从数据库中提取时将枚举转换为字符串

当我在class属性上添加@manytoOne时,也发生了同样的问题,我遇到了一个奇怪的问题,没有向表实体添加任何列

但是当我注释getter时。一切都很好。 请查看我的github回购协议以了解更多信息


那么,您想使用枚举的toString还是它的名称?你的文本说你想要toString,但是你的代码说你想要名字。你面临的问题是什么?具体发生了什么?还有,为什么不发布编译过的真实代码?@JBNizet我实现了一个tostring来获取字符串值,它可以工作,例如在日志或sys.out.print中。但是当我保存实体时,第一个spring将列创建为INT,并且storred的值是1.2.3,我希望tostring的值是storred。这也是一个真正的编译代码,这是我的repo你可以检查没有标准的类命名为attributeConverter。类总是以大写字母开头。您的转换器从不调用toString:它为enum MOBILE返回MOBILE,并对其他enum成员执行相同的操作。因此,如果这是您想要的,那么您只需使用@EnumeratedSTRING@JBNizet对于attributeConverter,它是带有A的,只是我错过了A,再次重写了它,感谢您的评论,这就是为什么我要尝试遵循约定和标准,我知道@enumeratedenumtype.string可以工作,我已经提过了。我正在学习spring,并尝试测试JavaEE7和JPA2.1的所有新版本,至少我已经尽力了。在我的下一个评论中,我将发布解决方案,请您尝试解释一下好吗?我没有得到它,但它工作这个提交修复了我的问题
 @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
}