Mam obecnie problem z mapowaniem istniejącego schematu db do podmiotów jpa, a wśród wielu dziwactw, utknąłem na ten problem.Czy jest możliwe, aby kolumna dyskryminatora w tabeli wtórnej w jpa
Mam dwie tabele, podobne do tego:
Table 1 Table 2
|Service | |Servicetype |
|servicetype | |Servicecategory |
| | | |
Gdzie servicetype
w tabeli 1 jest klucz obcy do typu usługi w tabeli dwa. Jednak usługi w tabeli 1 mają bardzo różne zachowanie w zależności od kategorii, do której należą (podczas gdy istnieje ponad 100 typów usług, są tylko 4 kategorie). Chciałbym być w stanie zmapować tabelę 1 do cztery różne kategorie uprawnień, w zależności od kategorii ich rodzaju usług.
To, co mam tak daleko:
@Entity
@Table(name = "table1")
@DiscriminatorColumn(name = "servicecategory", discriminatorType =
discriminatorType.INTEGER)
@DiscriminatorValue("1")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@SecondaryTable(name = "table2",
pkJoinColumns =
@PrimaryKeyJoinColumn(name = "servicetype", referencedColumnName =
"servicetype"))
public class AbstractService implements Serializable {
...etc
i 4 zajęcia rozciągające się od tego, Buth z innym discriminatorvalue
, co nie działa, ponieważ EclipseLink, których używam, próbuje odnośnika wartość servicecategory w table1.
Czy można wyrazić takie mapowanie za pomocą jpa, czy też powinienem wykonać mapowanie z "where servicecategory = ?
" dla każdego zapytania.
Czy próbowałeś podać nazwę tabeli i kolumny w definicji? "table2.servicecategory" – Chris
W adnotacji discriminatorcolumn? Tak. Ale wygenerowana kwerenda już określa tabelę przez alias, więc po prostu staje się $ tablealias.table2.servicecategory – vruum