2013-03-19 8 views
10

Come si esegue il mapping di un singolo valore da una colonna in un'altra tabella all'oggetto corrente?Annotazioni JPA - Come recuperare un singolo valore da una tabella diversa dall'oggetto corrente?

Esempio:

class Foo { 
    @Id 
    @Column(name="FOO_ID") 
    private String fooId; 

    @Column(name="FOO_A") 
    private String fooA; 

    //Column to map to another table? 
    //is a one to one mapping - but don't want a separate object for this. 
    private String barCode; 
} 

Tabella: Fields

Foo: FOO_ID, FOO_A

Bar: FOO_ID, BAR_CODE

Come faccio a recuperare il campo BAR_CODE senza creare un oggetto separato (o di una secondaria tabella) utilizzando JPA annotations?

+0

Si noti che questo è solo per il recupero. – Marcus

+0

Perché non vuoi un oggetto separato? – user489041

+0

È un servizio Web piuttosto grande e sto cercando di ridurre la creazione di oggetti e i dati extra che tornano quando ho bisogno di un solo campo. – Marcus

risposta

18

Utilizzare un secondary table. Ciò consente di mappare per un'entità, su base uno a uno, un'altra tabella e definire i mapping di colonne che lo utilizzano.

Esempio:

@Entity 
@Table(name = "foo") 
@SecondaryTable(name = "other_table", [email protected](name="id", referencedColumnName="FOO_ID")) 
public class Foo { 
    @Id 
    @Column(name="FOO_ID") 
    private String fooId; 

    @Column(name="FOO_A") 
    private String fooA; 

    @Column(table="OtherTable", name="barCode") 
    private String barCode; 
} 
+1

E se ci sono più tabelle secondarie? Nel mio caso, l'oggetto è un oggetto principale con diverse altre tabelle a cui viene fatto riferimento. In alcuni casi, la creazione dell'oggetto è necessaria, in altri la @ElementCollection funziona. Ma ero curioso di sapere se c'era un'altra soluzione per una singola colonna (come il recupero di un campo di descrizione per una tabella di codice/descrizione). – Marcus

+3

Se si dispone di più tabelle secondarie, utilizzare ... ['@ SecondaryTables'] (http://docs.oracle.com/javaee/6/api/javax/persistence/SecondaryTables.html) – Perception

+2

@Perception: non dovrebbe è '@Column (table =" other_table ", name =" barCode ")'? Stai sfruttando implicitamente questo [http://stackoverflow.com/a/19454829/1654265], è un errore di battitura o c'è qualche altra conversione di nomi altrove? –

Problemi correlati