【发布时间】:2015-05-01 15:25:11
【问题描述】:
我正在使用带有休眠作为提供程序的 spring data jpa。 我正在尝试将我的枚举保留在 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 new jpa2.1 功能而不是 @枚举
【问题讨论】:
-
那么,你想使用枚举的 toString() 还是它的名字?您的文本说您想要 toString(),但您的代码说您想要名称。你面临的问题是什么?具体会发生什么?另外,为什么不发布可以编译的真实代码?
-
@JBNizet 我实现了一个 tostring 来获取字符串值,它可以工作,例如在日志或 sys.out.print 中。但是当我保存实体时,首先将列创建为 INT,并且存储的值为 1.2.3,我希望存储 tostring 值。这也是一个可以编译的真实代码,这是我的仓库,你可以查看github.com/zirconias/RFID_REWRITE
-
没有标准类被命名为
attributeConverter。类总是以大写字母开头。而且您的转换器从不调用 toString():它为枚举 MOBILE 返回“MOBILE”,并对其他枚举成员执行相同操作。所以如果这就是你想要的,你所需要的就是用@Enumerated(STRING)注释实体中的字段 -
@JBNizet for the attributeConverter it is with A 只是我错过了 a 并再次重写它,感谢您的评论,这就是我试图遵循约定和标准的原因,我知道@ enumerated(enumtype.string) 会起作用,我已经提到过。我正在学习 spring 并尝试测试 java ee7 和 jpa 2.1 的所有新版本(至少尽我所能)。在我的下一条评论中,我将发布解决方案,请您尝试解释一下吗?我没有得到它,但它有效
标签: java spring-data spring-data-jpa jpa-2.1