2010-02-18 16 views
8

Ho un modello di dati JPA/Hibernate che sto utilizzando lo strumento Hberner hbm2ddl per generare il database DDL. Ho alcune stringhe che dovrebbero essere CHAR e alcune che potrebbero essere VARCHAR nel database. Voglio minimizzare la modifica manuale del DDL (mi rendo conto che alcuni dovranno accadere).Generazione DDL JPA/Hibernate; CHAR vs. VARCHAR

Qualcuno sa come dovrei fare questo? Mi rendo conto che posso creare tutte le stringhe VARCHARS o CHARS tramite un dialetto hackerato, ma non è quello che è sempre appropriato nel database.

Mi piacerebbe essere in grado di farlo con annotazioni o aop, evitando il testo di definizione di colonna personalizzato nelle mie classi.

Grazie.

risposta

4

Così, ho finalmente trovato che è possibile specificare un limite di lunghezza per un tipo nel dialetto. Così, ho deciso che qualsiasi cosa sotto una lunghezza di 10 dovrebbe essere char e nulla più che dovrebbe essere varchar:

registerColumnType(Types.VARCHAR, 10, "char($l)"); 

che non è esattamente quello che mancava, ma che è abbastanza buono. Triste che non l'ho trovato prima.

11

Annotare le stringhe che si desidera associare a un CHAR nel database con @Column(columnDefinition="CHAR(<your-char-length>)").

+1

Grazie per la risposta, ma nel mio ultimo paragrafo, lo dico. Sto cercando di evitare l'uso di columnDefinition. Speravo solo che ci fosse un modo migliore, perché sembrerebbe un desiderio ragionevole. –

+0

Non c'è molta differenza tra aggiungere un'annotazione o aggiungere un attributo di annotazione. – mtpettyp

+1

Ah, ma la differenza è il contenuto dell'attributo. Questo è il testo inserito direttamente nello schema ddl, quindi intrinsecamente specifico del database. Inoltre, devo duplicare la lunghezza della colonna nel testo. Questa particolare istanza non è poi così male, ma vale la pena di evitarla, se posso. Non sembra promettente, devo ammettere. –