簡體   English   中英

在 joined inheritance 策略中查詢基礎實體怎么可能也獲取子實體?

[英]How is it possible that querying base entity in joined inheritance strategy also fetches sub entities?

我有一個抽象基數 class:

@Inheritance(strategy = InheritanceType.JOINED)
@Getter
@Setter
@Entity
@ToString
public abstract class BillingDetails {
 @javax.persistence.Id
 @GeneratedValue(strategy = GenerationType.SEQUENCE,
        generator = "pk_for_inheritance")
Long Id;
@NotNull
private String owner;
}

和一個子類擴展基礎 class

@Entity
@Getter
@Setter
@ToString(callSuper = true)
public class CreditCard extends BillingDetails{

 @Basic(optional = false)
 private String cardNumber;
 @Basic(optional = false)
 private LocalDate expDate;
 @Basic(optional = false)
 private String cardKey;
 } 

當我查詢基本實體 BillingDetails 並像這樣打印結果時:

 List<BillingDetails> details=billingDetailsRepository.findAll();
 details.forEach(System.out::println);

我得到以下 output:

CreditCard(super=BillingDetails(Id=1, owner=Mehmet Dogan), cardNumber=6145 1233 4577 2360, expDate=2022-05-03, cardKey=673)

我的問題是:雖然我知道在連接策略休眠中連接相關的基表和子表,但是當我的結果列表是 BillingDetails 類型並且在我的基 class 中只聲明了 Id 和 Owner 屬性時,我怎么可能打印子類 CreditCard 的屬性?

我在這里錯過的是我認為多態性。 當我試圖獲得 Class 的結果時

  List<BillingDetails> details=billingDetailsRepository.findAll();
  details.forEach(x-> System.out.println(x.getClass()));

我得到以下 output:

class com.rumlor.domainmodelmapping.models.inheritancemodels.CreditCard

所以不知何故我錯過了某個地方,即使結果被投射到 BillingDetails 列表,Hibernate 為我將每個子實例變形為基礎實體。 附加檢查:

  CreditCard card= (CreditCard) details.get(0);
  System.out.println(card);

結果:

CreditCard(super=BillingDetails(Id=1, owner=Mehmet Dogan), cardNumber=6145 1233 4577 2360, expDate=2022-05-03, cardKey=673)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM