我使用的弹簧数据的JPA与Hibernate作为供应商。 我想要的,而不是(0,1,2) 我枚举类坚持在VARCHAR(enum.tostring)我的枚举:JPA 2.1属性转换器转换枚举仍然插入INT
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.proper领带:https://gist.github.com/anonymous/685eaca98fcba9c33872
,最后我的测试方法:https://gist.github.com/anonymous/8bb60fee39a201558e19
请帮帮我吧,我想用@convert新jpa2.1功能,而不是 @enumerated
所以,你要使用的枚举,或者它的名字的toString()?你的文字说你想要toString(),但你的代码说你想要这个名字。你面临的问题是什么?具体发生了什么?另外,为什么不发布真正的代码,编译? –
@JBNizet我实现了一个tostring来获取字符串值,它可以工作,例如在日志或sys.out.print中。 但是当我保存实体时,第一个春天创建列作为一个INT,并且storred的值是1.2.3,我希望tostring值被storred。 也是这是一个真正的代码编译, 这是我的回购,你可以检查 https://github.com/zirconias/RFID_REWRITE – dzgeek
没有标准类被命名为'attributeConverter'。类总是以大写字母开头。您的转换器永远不会调用toString():它会为枚举MOBILE返回“MOBILE”,并为其他枚举成员执行相同的操作。因此,如果这是你想要的,你需要的是注释与'@Enumerated(string)的实体领域' –