使用接口实现Hibernate的OneToMany关系

3

目前我有这样一个问题,我需要一个具有相同接口的不同对象的OneToMany ArrayList

例如:

@Entity
@Table(name = "store")
public class Store {
    @OneToMany(mappedBy = "store")
    private List<Product> allProducts;
}

public interface Product {
    String getProductCode();
}

@Entity
@Table(name = "car")
public class Car implements Product{
    int wheels;
}

@Entity
@Table(name = "computer")
public class Computer implements Product{
    String cpu;
}

我只想通过实现Product接口以轻松添加其他产品。但是Hibernate会报错:'One To Many' attribute value type should not be 'Product'
我找到了一些帖子,但它们很旧(5年或更早)。它们最终得出结论:以前不可能实现此功能。
在过去的5年中,Hibernate是否增加了任何功能以解决此问题?或者还有其他好的方法可以在同一个OneToMany关系中添加多个对象吗?我不想每次添加新产品时都更新我的Store类。

1
如果您使用映射的超类而不是接口,会怎样?您可以吗? - gtosto
@gtosto 是的,我认为我可以。但是我正在尝试以最干净的方式完成它。在我的情况下,接口更好。 - Stefan
您不能在此处使用映射的超类,编译器会抛出错误:“一对多”属性值类型不应为“映射的超类”。 - Alex
1个回答

1
在过去的5年中,Hibernate是否添加了任何功能来解决这个问题,或者是否有其他好的方法可以在同一个OneToMany关系中添加多个对象?我不想每次添加新产品时都更新我的Store类。
我认为最好的方法是将Product提升为实体(或至少使其成为映射的超类)。无论如何,@Any注释可以帮助您的情况,它用于建模多态关联。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接