2015-05-01 108 views
1

我使用的弹簧数据的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

+1

所以,你要使用的枚举,或者它的名字的toString()?你的文字说你想要toString(),但你的代码说你想要这个名字。你面临的问题是什么?具体发生了什么?另外,为什么不发布真正的代码,编译? –

+0

@JBNizet我实现了一个tostring来获取字符串值,它可以工作,例如在日志或sys.out.print中。 但是当我保存实体时,第一个春天创建列作为一个INT,并且storred的值是1.2.3,我希望tostring值被storred。 也是这是一个真正的代码编译, 这是我的回购,你可以检查 https://github.com/zirconias/RFID_REWRITE – dzgeek

+0

没有标准类被命名为'attributeConverter'。类总是以大写字母开头。您的转换器永远不会调用toString():它会为枚举MOBILE返回“MOBILE”,并为其他枚举成员执行相同的操作。因此,如果这是你想要的,你需要的是注释与'@Enumerated(string)的实体领域' –

回答

0

我试图把注释在吸气剂和它的作品。

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

当我在我的类属性添加@ManyToOne同样的问题发生了,我有一个问题weired,没有列被添加到表的实体。

但是当我注释的吸气剂。每件事情都可以。 请看看我的github回购进一步的相关信息

https://github.com/zirconias/RFID_REWRITE

+0

这次提交固定我的问题 https://github.com/zirconias/RFID_REWRITE/commit/9b01c5df9eff402724088bf7aa95c3ee5f5074ee – dzgeek