JPA 2.1 属性转换器 convert enum still insert int
JPA 2.1 Attribute Converter convert enum still insert int
我正在使用 spring 数据 jpa,以休眠作为提供程序。
我试图在 varchar(enum.tostring) 而不是 (0,1,2) 上保留我的枚举
我的枚举 class:
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 功能而不是
@枚举
我试着把注释放在 getter 上,它起作用了。
现在我可以调用@convert 将枚举转换为字符串,并在从数据库中提取时进行反之亦然。
当我在我的 class 属性上添加 @manytoOne 时发生了同样的问题,我遇到了一个奇怪的问题,没有列被添加到 table 实体。
但是当我注释 getter 时。一切都很好。
请查看我的 github 回购以获得更多信息
我正在使用 spring 数据 jpa,以休眠作为提供程序。 我试图在 varchar(enum.tostring) 而不是 (0,1,2) 上保留我的枚举 我的枚举 class:
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 功能而不是 @枚举
我试着把注释放在 getter 上,它起作用了。
现在我可以调用@convert 将枚举转换为字符串,并在从数据库中提取时进行反之亦然。
当我在我的 class 属性上添加 @manytoOne 时发生了同样的问题,我遇到了一个奇怪的问题,没有列被添加到 table 实体。
但是当我注释 getter 时。一切都很好。 请查看我的 github 回购以获得更多信息