Ottenere meno colonne con l’ibernazione

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 class di dominio che include tutti e 11 i campi e un file di mapping che mappa tutte e 11 le colonne nella tabella. Come si usa ottenere solo 2 di loro non tutti?

O:

  1. Usa proiezioni – Pro: nulla da aggiungere – Con: Non typesafe (il risultato è un List di righe in cui ogni riga è un Object[]) :

     select f.foo, f.bar from FatEntity f 
  2. Utilizzare un’espressione costruttore nella clausola SELECT (la class specificata non è richiesta per essere un’ quadro o essere mappata al database) – Pro: soluzione typesafe – Con: Altre classi, a meno che non si riutilizza FatEntity come titolare, nel qual caso molti campi saranno essere null :

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

    Si noti che se un nome di class entity framework è specificato nella clausola SELECT NEW , le istanze di quadro risultanti sono nel nuovo stato (nessuna id quadro persistente).

  3. Usa un’altra entity framework mappata sulla stessa tabella con solo i campi obbligatori – Pro: È un’ quadro reale che puoi modificare e aggiornare – Con: Altre classi.

     from LightEntity 

Le principali differenze tra # 2 e # 3 sono:

  • 2 non richiede affatto che il titolare sia un’entity framework.

  • il titolare in # 2 potrebbe essere un’ quadro mappata su un’altra tabella.
  • se # 2 restituisce entity framework, sono in un nuovo stato (questo potrebbe essere un problema, o non).

Provare:

 SELECT myEntity.one, myEntity.two FROM MyEntity myEntity 

Puoi anche fare:

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

per ottenere un elenco delle descrizioni delle quadro.

Se non hai mai bisogno di più di quelle 2 colonne della tabella, puoi modificare la mapping in stato di ibernazione per mappare solo le 2 colonne necessarie per la class di entity framework. 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.