2010-03-15 17 views
11

Sto usando JPA e ho bisogno di rendere "tableName" una variabile.In @Table (name = "tableName") - rendere "tableName" una variabile in JPA

In un database, ho molte tabelle e il mio codice deve accedere alla tabella in cui viene specificato per leggere.

@Entity 
@Table(name = "tableName") 
public class Database implements Serializable {...............} 

Qualche idea?

+0

* "il mio codice deve accedere alla tabella in cui viene specificato per leggere." * Potresti chiarire che cosa stai cercando di fare. –

+0

Si prega di vedere il mio commento per rispondere 1. Grazie. – zengr

+0

Per riformulare: ho bisogno di uno schema dinamico. Dove viene creata la tabella al volo. – zengr

risposta

4

Si può fare qualcosa del genere, se questo è il tuo problema, immagino. Mai provato, è solo una supposizione selvaggia. Ma questa è la solita pratica - seguo per le query con nome; sì, questa è una cosa completamente diversa.

@Entity 
@Table(name = Database.tableName) 
public class Database implements Serializable { 
    public static final String tableName = "TABLE_1"; 
    ............... 
} 

Ma non vedo perché qualcuno dovrebbe farlo. Potresti dirci cosa stai facendo? Perché hai poche tabelle esattamente identiche?

[Edited]

ho cercato la soluzione. Non funzionava , dice: Il valore per l'attributo di annotazione Table.name deve essere un'espressione costante.

Quindi, non è abbastanza chiaro? Voglio dire, non puoi farlo. E credo che sia abbastanza logico. Se si desidera che Hibernate generi lo schema, è possibile definire tutte le entità desiderate, nello schema e con le relazioni appropriate.

+1

Ok, questo è il mio scenario. Ho una classe JPA chiamata "Database" e posso avere un numero elevato di tabelle (a seconda dei dati di input dal lato client).Quindi, per ora, la classe Database crea solo UNA tabella quando viene eseguita (@Table = nome). Ma ho bisogno di questa classe per creare tabelle in fase di esecuzione con la variabile TableName che proviene da altre fonti. Ho provato la tua soluzione. Non ha funzionato, dice: Il valore per l'attributo di annotazione Table.name deve essere un'espressione costante. – zengr

+0

Per riformulare: ho bisogno di uno schema dinamico. Dove viene creata la tabella al volo. – zengr

+0

@zengr: Controlla il mio addendum al post. –

2

Specificare il nome della tabella in fase di runtime non è possibile, questo non è semplicemente il modo in cui funziona JPA (e non sono ancora sicuro di ottenere i requisiti). Mappare diverse entità sul set di tabelle ed eseguire varie query o costruirle dinamicamente (magari utilizzando l'API Criteria) a seconda dell'input dal lato client o utilizzare qualcosa di diverso da JPA (come iBATIS).

+0

È possibile una soluzione alternativa? http://java.dzone.com/articles/hibernate-dynamic-table-routin – zengr

+1

@zengr Non posso rispondere a questa domanda, non capisco ancora cosa stai cercando di fare. Tavoli dinamici? Schemi diversi? Questo non è chiaro. –

+0

@zengr Sembra che questo link faccia quello che vuoi (anche se può completamente offuscare le cose per un tecnico di manutenzione). Hibernate Shards è anche un'opzione interessante. Ma quando vai in questa direzione, chiediti molte volte "Ne hai davvero bisogno?". Il tuo progetto è veramente complesso da giustificare questa soluzione complessa? –

3

Se si desidera solo fare riferimento/leggere il nome della tabella, è possibile come nel seguente codice. Se vuoi cambiare, non è possibile come ha detto Pascal.

@Entity 
@Table(name = Database.tableName) 
public class Database implements Serializable { 
    public static final String tableName = "TABLE_1";//this variable you can reference in other portions of your code. Of course you cannot change it. 
    ............... 
} 
+0

ha funzionato perfettamente. Grazie. :) – dgupta3091

0

Se si desidera selezionare i dati da tabelle diverse,

quindi è possibile utilizzare:

@Subselect("")

invece di:

@Table(name = "tableName").

Problemi correlati