2015-04-27 24 views
5

Mam klasy A i klasy BHibernacja mapping: ignorować super klasy pole

public class A{ 
int f1; 
int f2; 
int f2; 
} 

public class B extends A{ 
} 

moje pytanie brzmi: w jaki sposób zignorować pole na przykład „F2” w tabeli odwzorowanym do B?

+0

której strategii dziedziczenia używasz? tabela na klasę, tabela na podklasę lub tabelę na klasę betonu .. ?? –

+0

Czy przeczytałeś o przejściowym? – dosdebug

Odpowiedz

2

Witam Spróbuję odpowiedzieć zakładając edycję, którą zrobiłem do twojego posta W poniższym kodzie próbuję zignorować pole f2 z klasy A, tj. Nadklasy B, używając AttributeOverride.

@Entity 
@AttributeOverride(name = "f2", column = @Column(name = "f2_col", insertable = false, updatable = false) 
public class B extends A{ 
} 

Chcesz o tym przeczytać dalszą AttributeOverride
AttributeOverride z wkładane = false, aktualizowalny = false powinno pomóc .. ale to też zależy od strategii spadkowego .. to tylko ułatwia tworzenie odwzorowaną pole odziedziczone z nadrzędnej przemijający .. tak, że jakaś inna podklasa może go używać, ale byłoby zignorować dla danej klasy sub ..

+0

@Amir dzięki .. edycja została zatwierdzona .. daj mi znać, jeśli rozwiązanie działa dla ciebie .. –

+0

to po prostu nadaje innej nazwy kolumnie w tabeli bazy danych, ale pytanie jest jak go zignorować, coś podobnego do korzystania z Transient zmienna. – Chaitanya

+0

@Chaitanya dziękuję .. ale zakładając, że podklasa i nadklasa są zmapowane i chcesz zignorować ** wartość f2 ** w podklasie. AttributeOverride z _insertable = false, updatable = false_ powinno pomóc ... ale to także zależy od twojego dziedziczenia strategia .. pomaga tylko uczynić odwzorowane pole dziedziczone z superklasy przejściowej .. tak, że inna podklasa może z niej korzystać, ale zignoruje to dla tej konkretnej klasy podrzędnej .. daj mi znać, jeśli moje zrozumienie jest złe .. –

1

Jeśli chcesz warunkowo zastosować pola do podklasy, być może należy przeprojektować swoje zajęcia tak, że wyglądają jak ten

public abstract class MyAbstractClass { 
    // ... 
} 

public class A extends MyAbstractClass { 
    int f1; 
} 

public class B extends MyAbstractClass { 
    int f2; 
} 

Zakładając, że aplikujesz to do mapowania tabel bazy danych za pomocą Hibernate, możesz użyć @MappedSuperclass na MyAbstractClass i @Entity na A i B - mam nadzieję, że to pomaga.