[英]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.