Mysql
 sql >> Database >  >> RDS >> Mysql

Come aumentare la lunghezza di una stringa in mysql durante la mappatura utilizzando JPA

Questo perché la lunghezza predefinita di VARCHAR colonne nelle istruzioni DDL create dalla maggior parte dei provider JPA (inclusi Hibernate ed EclipseLink) è 255. Specificando la length attributo alla @Column l'annotazione aiuta a sovrascrivere il valore, in modo che il nuovo valore venga prelevato dal generatore di schemi del provider JPA.

Questa è un'ipotesi errata. Il provider JPA creerà le tabelle solo una volta e non modificherà dinamicamente la lunghezza della tabella sottostante durante la vita dell'applicazione e solo se si configura il provider per creare/aggiornare le definizioni delle tabelle in primo luogo. Inoltre, la mappatura predefinita di String è l'SQL VARCHAR digitare.

Sembra che tu abbia configurato il provider JPA per creare le tabelle secondo necessità (dopo averle eventualmente eliminate), durante il processo di inizializzazione. Se stai usando Hibernate, questo viene fatto usando hibernate.hbm2ddl.auto proprietà specificata in persistence.xml con un valore di update , create o create-drop . Con EclipseLink, dovresti specificare la proprietà eclipselink.ddl-generation con un valore di create-tables o drop-and-create-tables .

Entrambe le proprietà di cui sopra non sono consigliate per l'uso in una produzione ambiente . L'approccio ideale è disporre di script DDL per creare le tabelle. Dal momento che stai usando VARCHAR , dovresti specificare una lunghezza adeguata nella definizione della colonna, per adattarsi alla lunghezza massima dell'input utente . Inoltre, poiché stai usando VARCHAR su CHAR , il motore di database assicurerà che lo spazio di archiviazione allocato dipenda dalle dimensioni dei record archiviati.

Se non hai bisogno di una stringa al valore predefinito VARCHAR mappatura e utilizzare invece un'altra mappatura valida, quindi devi utilizzare columnDefinition attributo della @Column annotazione. Un esempio di utilizzo per la mappatura di Calendar al TIMESTAMPTZ Il tipo di dati SQL è mostrato nel JPA WikiBook ; dovrai modificarlo in base alle tue esigenze.