Mam podmiot, który jest super klasa
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = super_class)
public abstract class SuperClass implements Serializable {
@Transient
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;
public abstract void initDefaultValues();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
a niektóre podklasy, które rozciągają nadklasy.
@Entity
@Table(name = Subclass1)
public class Subclass1 extends SuperClass{
private static final Logger log = LogManager
.getLogger(Subclass1.class);
@Transient
private static final long serialVersionUID = 1L;
// testcase configuration tab
private String configurationTabTestServer;
private String umtsRelease;
}
Pozostałe zajęcia wyglądają tak samo.
Kiedyś je SINGLE_TABLE na typ dziedziczenia, ale chcieliśmy każdej klasy betonu mieć każdy swój stolik. Ze względu TABLE_PER_CLASS musiałem użyć GenerationType.TABLE.
Mam także klasę podmiot, który klucz obcy do super klasy
@Entity
@Table(name=myother_entity)
class Entity1{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@OneToOne(cascade = CascadeType.ALL)
private SuperClass superclass;
//more fields
}
Kiedyś klasy abstrakcyjnej, ponieważ mam jedną klasę Entity1 które mogą mieć różny typ nadklasy. Nie chcieliśmy, aby utworzyć inny Entity1 i Entity2 i Entity3 itp klas dla każdej podklasy. Dlatego stworzyliśmy jedną klasę Entity1 które mogą mieć pole typu nadklasy, które mogłyby wskazywać na dowolny z podklasy.
Na moim programie tworzę wiele intances Entity1 że niektóre z nich, które mają inny rodzaj nadrzędnej jako wartość pola. Każdy może być typu subclass1 lub subclass2 itp Początkowo używaliśmy mieć pojedynczą tabelę dla wszystkich podklas. Wszystko działało w porządku. Ale po zdecydowaliśmy się podzielić nasze stoły to jest to, co się dzieje. Kiedy edytować dowolną instancję Entity1, że ma już SuperClass zestaw pola (przy użyciu jednej z klas sub) i zapisać go (łączących go), a następnie tworzy nową instancję moim Podklasa powiązanych z moim przykład Entity1, a następnie zapisuje je do Baza danych. Mam więc dwa rekordy teraz na stole podklasy. Tak się nie stało, kiedy użyliśmy SINGLE_TABLE rodzaj dziedziczenia. Czy to normalne zachowanie dla JPA i hibernacji?