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
如果您想了解更多关于继承的信息,请查看此处。
添加回答
举报