【发布时间】:2012-03-25 22:05:38
【问题描述】:
我想在 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;
}
感谢 Play!我已经定义了主键标识符 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();
显然,它不起作用。
【问题讨论】:
标签: java hibernate inheritance playframework