2014-02-23 19 views
1

我想在数据库中保存我的menuItem对象。其中一个itemFields是一个ItemType字符串,它由ItemType枚举定界。这是我的MenuItem POJO。不能将枚举转换为字符串,同时在休眠中持久化对象

public class MenuItemImpl implements MenuItem{ 

    private long id; 

    private String itemName; 

    private String itemType; 

    private int itemPrice; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 
    public String getItemName() { 
     return itemName; 
    } 

    public void setItemName(String itemName) { 
     this.itemName= itemName; 
    } 

    public ItemType getItemType() { 
     return ItemType.valueOf(itemType); 
    } 

    public void setItemType(ItemType itemType) { 
     this.itemType=itemType.toString(); 
    } 

    public int getItemPrice() { 
     return this.itemPrice; 
    } 

    public void setItemPrice(int itemPrice) { 
     this.itemPrice=itemPrice; 
    } 

} 

这是我的ItemType枚举

public enum ItemType { 
    BURGER("BURGER"), BEVERAGE("BEVERAGE"), SNACK("SNACK"), TOY("TOY"); 

    private String value; 

    private ItemType(String value) { 
     this.value = value; 
    } 

    public String getValue() { 
     return value; 
    } 

    @Override 
    public String toString() { 
     return value; 
    } 
} 

现在,当我尝试做此对象的保存。我得到以下例外:

com.saggezza.ItemType cannot be cast to java.lang.String 

我不明白为什么它甚至应该尝试投射ItemType。因为我在menuItem POJO中的getter和setter方法已经将enum转换为字符串和字符串转换为enum。

任何想法?

+0

可能重复[Hibernate枚举映射](http://stackoverflow.com/questions/1593929/hibernate-enum-mapping) –

回答

2

的问题是,Hibernate使用您的getter/setter方法来访问你的财产,所以当它要得到itemType场保存它的价值,它会调用getItemType(),期待它返回一个String(是什么在映射中),并将得到一个ItemType而不是,因此是例外。

您可以查看this answer,了解如何将enum直接添加到您的映射中。

-1

我注意到这个方法:

public void setItemType(ItemType itemType) { 
    this.itemType=itemType.toString(); 
} 

你必须指定为ITEMTYPE和全局字符串变量ITEMTYPE名称相同的参数,使之更容易支持你的代码(图出错的地方)我建议将参数重命名为item。所以像这样:

public void setItemType(ItemType item) { 
    this.itemType=item.toString(); 
} 

然后你总是知道什么项目指。

+0

试过。我得到同样的例外 –

+0

这根本没有帮助解决问题,但只是更改变量的名称。 – Krease