为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate - 具有作为接口的属性的实体类

Hibernate - 具有作为接口的属性的实体类

ibeautiful 2021-12-01 19:26:41
我对这个话题进行了一些研究,我要么找到了非常老的帖子,要么找到了不完全是我想要实现的问题。我已经使用 Hibernate 多年了,我认为自己非常精通它。我之前在我的持久层中使用了继承将具有不同类型订单的订单表示为子类(对于医院系统),以获得很好的结果。我正在为商店开发一个新项目,但我面临一个问题,我不确定 Hibernate 是否可以解决。基本上,我允许用户构建包含您期望在帐单中包含的信息的 Bill 对象:客户姓名、帐单编号、总金额、税金等。每个 Bill 对象都包含一组 OrderedProduct 对象,这些对象又包含一个 Product 对象和一个数量。只有这个要求,我的项目实际上已经完成并且一切正常。我的客户现在要求添加,我不知道如何解决。我被要求允许构建 Kit 对象,这些对象只不过是一组具有价格的 Product 对象,以便为经常一起购买的某些东西提供折扣。小菜一碟,我构建了一个 GUI 来构建和保存这些对象,但我现在有一个问题:如何将这些 Kit 对象连接到 Bill 中?我的 OrderedProduct 对象当前绑定到一个 Product 对象,这个模型显然与这个新要求不兼容。我不能使用继承(据我所知),因为套件基本上只是一个降价的产品列表。如果这两个类都继承自一个公共抽象类,那么一个类如何包含另一个类的集合?我开始构建它的方式是使用 Billable 接口。允许选择产品/套件的下拉菜单使用以下代码填充自身:items = FXCollections.observableArrayList(productService.findAllInInventory());@Overridepublic List<Billable> findAllInInventory() {    List<Product> products = findProductsInInventory();    List<Kit> kits = findKitsInInventory();    List<Billable> billables = new ArrayList<>();    billables.addAll(products);    billables.addAll(kits);    return billables;}这允许一个下拉列表包含两种类型的实体,同时与用户完全无缝。我一直在用这个概念调整账单创建 GUI 的其余部分,直到我意识到:实体类的属性不能是接口类型(再次,据我所知)。对不起,我的解释很长,我希望我想要做的很清楚。我可以想到一些(不太理想的)解决方法,但如果有人知道如何设计这个模型,我会很高兴听到的!
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

结论是您不能将实体类的持久属性作为接口类型。如果您的设计最终需要这样的结构,您(目前)将不得不重新构建事物。


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信