У меня есть три класса, которые я хочу моделировать, используя Hibernate в Play! Framework:
@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!Я уже определил идентификатор идентификатора первичного ключа.
В большинстве случаев он работает нормально: у меня есть три таблицы базы данных, идентификаторы 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();
Очевидно, это не работает.