2 回答
TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
在您的場(chǎng)景中,我認(rèn)為應(yīng)該使用單表策略,因?yàn)樗鼘槊總€(gè)類層次結(jié)構(gòu)創(chuàng)建一個(gè)表。這也是 JPA 選擇的默認(rèn)策略,如果我們沒有顯式指定一個(gè)。您可以通過將@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 {
}
由于所有實(shí)體的記錄將位于同一個(gè)表中,因此 Hibernate 提供了一種區(qū)分這些表行的方法。在這種情況下,將添加一個(gè)名為 DTYPE 的鑒別器列,該列將實(shí)體的名稱作為值。
您可以為 CurrencyRate 創(chuàng)建存儲(chǔ)庫(kù),然后基于 DType 列查詢 CurrencyRate 表。
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
可能您必須使用正確的繼承策略。喜歡這個(gè):
@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 {
}
其他貨幣也是如此。您應(yīng)該能夠針對(duì)類進(jìn)行查詢,從所有表中檢索所有結(jié)果,并且必須使用來區(qū)分貨幣。此外,您還可以針對(duì)單一貨幣執(zhí)行查詢。CurrencyRateinstanceof
如果您想了解更多關(guān)于繼承的信息,請(qǐng)查看此處。
添加回答
舉報(bào)
