2013-05-17 5 views
6

ho questo codice:Il campo lunghezza su javax.persistence @Column definisce max?

public class Item { 
    @Column(name = "serialNo", length = 12) 
    public String getSerialNo() { 
     return this.serialNo; 
    } 

    public void setSerialNo(String serialNo) { 
     this.serialNo = serialNo; 
    } 
} 

Tuttavia, lo schema del database definisce la colonna da lunghezza 13. Quando la voce viene recuperato tramite:

List<Item> items = getEntityManager().createNamedQuery(SQL).getResultList(); 

I dati che ha serialNo caratteri pari a 13 (poiché lo schema della tabella db consente 13) vengono ancora visualizzati come 13, non troncati. A cosa serve poi lo @Columnlength?

risposta

9

s' The javax.persistence.Columnlength attributo viene utilizzato per definire la lunghezza della colonna di String campi (che viene ignorato per altri tipi) ed è solo utilizzato quando il framework di persistenza genererà lo schema del database (diversi CREATE TABLE s) dal entità, come ad esempio questa opzione (per Hibernate su hibernate.cfg.xml):

<property name="hbm2ddl.auto">create</property> 

Nel tuo esempio, la colonna serialNo verrebbero creati come VARCHAR(12).

Per tutti gli altri scopi (inserimento o recupero di dati), è ignorato.



Inoltre, è utile se si desidera informazioni metadati "documento" del database nelle classi. può convalidare il valore da salvare prima di tentare di inserire ed evitare qualsiasi "valore troppo lungo" o "troncamento dati" -come eccezioni.

+0

È possibile incollare il collegamento alla documentazione a tale proposito? Questo collegamento non dice nulla sulla lunghezza utilizzata solo per DDL: http://docs.oracle.com/javaee/5/api/javax/persistence/Column.html#length() –

+0

Sì, non è troppo specifico a riguardo. Guarda le specifiche (http://download.oracle.com/otndocs/jcp/persistence-2_1-fr-eval-spec/index.html - JavaPersistence.pdf), sezione 11.2.2.1. Questo è l'unico momento in cui menzionano 'length' nell'intero documento. – acdcjunior

+0

Chiaramente menzionato relativo alla generazione dello schema: "11.2 Metadati oggetto/relazione utilizzati nella generazione dello schema". Grazie per la risposta. –