Java JPA 2.1属性转换器转换枚举仍然插入int
我使用SpringDataJPA和hibernate作为提供者。 我正在尝试在varcharenum.tostring而不是0,1,2上持久化我的枚举 我的枚举类: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
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
}