Как и предыдущие комментаторы, я согласен, что модель класса должна отличаться. Я думаю, что-то вроде следующего будет достаточно:
@Entity(name="switches")
@DiscriminatorColumn(name="type")
@DiscriminatorValue(value="400")
public class Switch implements ISwitch {
// Implementation details
}
@Entity(name="switches")
@DiscriminatorValue(value="500")
public class DmsSwitch extends Switch implements Serializable {
// implementation
}
@Entity(name="switches")
@DiscriminatorValue(value="600")
public class SomeOtherSwitch extends Switch implements Serializable {
// implementation
}
Возможно, вы можете предотвратить создание экземпляра Switch напрямую, сделав конструктор защищенным. Я верю, что Hibernate принимает это.