我有一個抽象基類:
@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;
}
和一個擴展基類的子類
@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);
我得到以下輸出:
CreditCard(super=BillingDetails(Id=1, owner=Mehmet Dogan), cardNumber=6145 1233 4577 2360, expDate=2022-05-03, cardKey=673)
我的問題是:雖然我理解在連接策略中休眠連接相關的基表和子表,但是當我的結果串列是 BillingDetails 型別并且僅在我的基類中宣告了 Id 和 Owner 屬性時,我怎么可能列印子類 CreditCard 的屬性?
uj5u.com熱心網友回復:
我在這里錯過的是我認為多型性。當我試圖獲得類似的結果時
List<BillingDetails> details=billingDetailsRepository.findAll();
details.forEach(x-> System.out.println(x.getClass()));
我得到以下輸出:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/473587.html
