Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:每个具体类的表映射和引用_Hibernate_Class_Reference_Concrete - Fatal编程技术网

Hibernate:每个具体类的表映射和引用

Hibernate:每个具体类的表映射和引用,hibernate,class,reference,concrete,Hibernate,Class,Reference,Concrete,我指的是每种混凝土等级的表,如下所述: 按照9.1.6中的示例,假设我有CashPayment和CreditCardPayment,两者的超类都是抽象的Payment类 如果我使用每个具体类类型映射的表,我将有两个表:CASH\u PAYMENT和CREDIT\u PAYMENT,以及no PAYMENT表。那很好 但是,如何构建另一个名为Xyz的实体类型,该实体类型包含对现金或抄送付款的引用/属性。。。?从Java的角度来看,这没关系:Xyz.pamentType,但是我如何在HBM/anno

我指的是每种混凝土等级的表,如下所述:

按照9.1.6中的示例,假设我有CashPayment和CreditCardPayment,两者的超类都是抽象的Payment类

如果我使用每个具体类类型映射的表,我将有两个表:CASH\u PAYMENT和CREDIT\u PAYMENT,以及no PAYMENT表。那很好

但是,如何构建另一个名为Xyz的实体类型,该实体类型包含对现金或抄送付款的引用/属性。。。?从Java的角度来看,这没关系:Xyz.pamentType,但是我如何在HBM/annotations中配置它,以及Xyz表是什么样子

它可能有一个PAYMENT_ID列,但显然它不能是外键,因为有两个潜在的表可供参考。我猜XYZ需要某种类型的附加列来说明它是哪种类型的付款

或者Hibernate会在每次读取Xyz实例时使用ID连接这两个表以找到正确的类型吗


顺便说一句,我知道这是一个糟糕的方法,我可以使用更简单的替代方法,但我已经简化了这个问题,因为答案比替代方法对我更有用。谢谢

没有什么可配置的,只是创建与支付的关系,例如:

@OneToOne private Payment payment;
然后给它赋值并保存它们

不使用其他列来查找付款类型。要确定付款类型,请休眠

使联合 现金支付查询结果 CreditCardPayment表的查询结果。 这些select语句在select列表中包含表示类型的附加项。 外部选择从union的嵌套查询结果中获取值。附加属性确定在创建付款实例时将使用哪个具体类。
谢谢,你回答得很清楚。这与我问Hibernate是否会加入这两个表时的意思类似,尽管我的意思是联合。如果它们是三个大表,那么联合就不理想了……是否有必要向Hibernate提供更多信息以避免联合?XYZ的表结构如何。会有外键吗?如果是,将指向哪个表?