当前位置: 首页 > 知识库问答 >
问题:

JPA枚举继承

贺宏富
2023-03-14
#Interface
interface BillCategory

#Enum 1
public enum GroceryPurchase implements BillCategory {
  VEGAN,  
  VEGETARIAN,
  PESCITARIAN,
  FLEXITARIAN, 
  OMNIVORE


#Enum 2
enum ElectronicPurchase implements BillCategory{ 
 SMARTPHONE, HARDWARE, SOFTWARE }
private BillCategory billCategory;
Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: net.wizypay.wizypay.bill.model.BillCategory, at table: bill_entity, for columns: [org.hibernate.mapping.Column(bill_category)]

共有1个答案

虞展
2023-03-14

当然,我不知道Smartphone怎么不是Hardware,但是可以。以下是我将如何做到这一点(不确定我是否丢弃了您现在实际需要的东西)。使BillCategory成为枚举。添加私有字段PurchaseType(这也可以是另一个枚举,包含GroceryPurcheElectronicPurche)和Category(这是字符串,与枚举名称匹配)。这应该可以解决Hibernate的问题。

说明我的意思的代码:

enum BillCategory {

    VEGAN("VEGAN", PurchaseType.GroceryPurchase), 
    VEGETARIAN("VEGETARIAN",PurchaseType.GroceryPurchase),
    SMARTPHONE("SMARTPHONE", PurchaseType.ElectronicPurchase);

    private String category;
    private PurchaseType type;

    BillCategory(String category, PurchaseType type) {
        this.category = category;
        this.type = type;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public PurchaseType getType() {
        return type;
    }

    public void setType(PurchaseType type) {
        this.type = type;
    }

}

enum PurchaseType {
    ElectronicPurchase, GroceryPurchase;
}

然后,您还应该使用@enumerated(enumtype.ordinal)或其他一些enumtype注释实体类中的private BillCategory;,这取决于您希望将其保存在数据库中的方式

 类似资料:
  • 问题内容: 为什么Java中的枚举不能从其他枚举继承?为什么以这种方式实施? 问题答案: 例子 因为将元素添加到枚举将有效地创建超类,而不是子类。 考虑: 这与常规类的工作方式相反。我想可以以这种方式实施,但实施起来比看起来要复杂得多,而且肯定会使人们感到困惑。

  • 问题内容: 您可以在Swift中继承枚举吗?关于枚举继承,应该注意哪些规则? 以下测试代码: 产生 问题答案: 在Swift语言中,我们有Structs,Enum和Classs。Struct和Enum通过副本传递,而类通过引用传递。只有类支持继承,枚举和结构不支持。 因此,要回答您的问题,您不能继承Enum(和Struct类型)。在这里看看:

  • 我尝试使用@Enumerated annotation映射枚举类型,但得到以下错误: 我的工作:在postgres @entity@table(name=“test_table”)公共类TestTable{... @enumerated(enumtype.string)@column(name=“col”)private TestType col;...}

  • 你能在Swift中继承枚举吗?关于枚举继承,应该知道哪些规则? 以下测试代码: 产生

  • 问题内容: 我正在编写一个库,该库具有一组预定义的枚举值。可以说,我的枚举如下所示。 现在,使用此库的客户端可能需要添加更多值。假设客户需要添加和。这不会覆盖任何现有值,而是使枚举具有5个值。 在此之后,我应该能够使用5种不变的可能性。 实现此目标的最佳方法是什么? 问题答案: 您不能具有另一个扩展,也不能通过继承将值“添加”到现有值。 但是,可以实现。 我要做的是让原始实现标记(即没有方法声明)

  • 我的JPA实体作为枚举字段 哪里 如果我用规范添加where条件 将枚举包含到规范查询中的正确方法是什么?