我想在 Play!Framework 中使用 Hibernate 建模三个类:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class SupplyArea extends Model {
public int scadaId;
public String symbol;
}
@Entity
public class HighVoltageSubstation extends SupplyArea {
public int hvAttribute;
}
@Entity
public class MediumVoltageSubstation extends SupplyArea {
public int mvAttribute;
}
感谢玩!我已经定义了主键标识符 id。
它在大多数情况下工作正常:我有三个数据库表,HVSubstation 和 MVSubstation 标识符被创建为 SupplyArea 的外键等。
但我不“拥有”这些对象,我需要从另一个来源导入它们。然后,如果另一个应用程序发生变化,我需要更新我的应用程序。问题是当对象更改其类型时:它不再是 HVSubstation,而是现在的 MVSubstation。所有其他参数(即 scadaId、符号)保持不变。它是同一个对象,但具有另一种类型。
有什么方法可以在不丢失主键标识符的情况下在子类型之间切换吗?我尝试过这样的事情:
SupplyArea oldArea = SupplyArea.getByScadaId(scadaId); // returns HVSubstation
SupplyArea newArea = new MVSubstation();
newArea.id = oldArea.id;
newArea.scadaId = scadaId;
newArea.symbol = symbol;
oldArea.delete();
newArea.save();
显然,这是行不通的。
如果变电站可以从高压变为中压(或返回),我不会将它们建模为单独的子类型。相反,我将仅使用单个变电站类型,并通过属性来确定它是高压还是中压。在 Hibernate 中,这将映射到具有鉴别器属性的单个表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)