2 回答

TA貢獻1966條經驗 獲得超4個贊
在您的場景中,我認為應該使用單表策略,因為它將為每個類層次結構創建一個表。這也是 JPA 選擇的默認策略,如果我們沒有顯式指定一個。您可以通過將@Inheritance注釋添加到超類來定義要使用的策略:-
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class CurrencyRate {
@Id
@JsonSerialize(using=DateSerializer.class)
private Date datetime;
@NotBlank
@JsonSerialize(using=FloatSerializer.class)
private float rate;
// constructor, getters, setters
}
沒有字段的子類:-
@Entity
public class Rupee extends CurrencyRate {
}
@Entity
public class Dollar extends CurrencyRate {
}
由于所有實體的記錄將位于同一個表中,因此 Hibernate 提供了一種區分這些表行的方法。在這種情況下,將添加一個名為 DTYPE 的鑒別器列,該列將實體的名稱作為值。
您可以為 CurrencyRate 創建存儲庫,然后基于 DType 列查詢 CurrencyRate 表。

TA貢獻1811條經驗 獲得超5個贊
可能您必須使用正確的繼承策略。喜歡這個:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class CurrencyRate {
(... omitted for brevity ...)
}
子:
@Entity
@Table(name="USDOLLAR")
public class UnitedStatesDollar extends CurrencyRate {
}
@Entity
@Table(name="EURO")
public class Euro extends CurrencyRate {
}
其他貨幣也是如此。您應該能夠針對類進行查詢,從所有表中檢索所有結果,并且必須使用來區分貨幣。此外,您還可以針對單一貨幣執行查詢。CurrencyRateinstanceof
如果您想了解更多關于繼承的信息,請查看此處。
添加回答
舉報