2010-04-01 11 views
5

Ho una tabella con 11 colonne, ma ho bisogno di prenderne solo 2 nella mia applicazione, sto usando la combinazione spring/hibernate/DAO. Per ora ho una classe di dominio che include tutti e 11 i campi e un file di mappatura che mappa tutte e 11 le colonne nella tabella. Come si usa ottenere solo 2 di loro non tutti?Ottenere meno colonne con la sospensione

risposta

10

O:

  1. Utilizzare proiezioni - Pro: nulla da aggiungere - Contro: Non tipizzate (il risultato è una List di righe in cui ogni riga è un Object[]):

    select f.foo, f.bar from FatEntity f 
    
  2. Usa un'espressione costruttore nella clausola SELECT (la classe specificata non è richiesta per essere un'entità o per essere mappata al database) - Pro: soluzione typesafe - Con: Altre classi, a meno che non si riutilizzi FatEntity come titolare nel qual caso molti campi saranno null:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f 
    

    Si noti che se un nome di classe di entità è specificato nella clausola SELECT NEW, le istanze di entità risultanti sono nel nuovo stato di(senza identità persistente).

  3. Utilizzare un'altra entità mappata sulla stessa tabella con solo i campi obbligatori - Pro: È un'entità reale che è possibile modificare e aggiornare - Con: Altre classi.

    from LightEntity 
    

Le principali differenze tra 2 e # 3 sono:

  • 2 non richiede che il detentore di essere un'entità affatto.

  • il titolare in # 2 potrebbe essere un'entità mappata su un'altra tabella.
  • se # 2 restituisce entità, si trovano in un nuovo stato (potrebbe essere un problema o meno).
+0

@Pascal Thivent non posso semplicemente lasciare 2 campi nella mia classe dominio e file di mapping? –

+0

@Gandalf Beh, ho pensato che qualcuno stesse usando gli altri campi. Se questo non è vero, allora puoi davvero cambiare la tua entità attuale. –

+0

Grazie per le molteplici soluzioni e spiegazioni, come vieni comunque? goderVi? leggere libri, allenarsi? Accetterò la tua risposta.se tu potessi indicarmi la giusta direzione sarebbe fantastico, come: siti web, esempi, libri. –

6

Prova:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

Si può anche fare:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity 

per ottenere un elenco di descrizioni di entità.

2

Se non sono mai necessarie più di quelle 2 colonne della tabella, è possibile modificare la mappatura in modalità ibernazione per mappare solo le 2 colonne necessarie per la classe di entità. Mappare solo le colonne della tabella a cui si desidera accedere nella propria applicazione. Tieni presente che i vincoli del database sulle colonne "ignorate" possono essere violati come vincoli non nulli, chiavi esterne o vincoli univoci.

+0

E per quanto riguarda la classe di dominio, devo avere anche 2 campi? –

Problemi correlati