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

Spring Boot con Hibernate:schema di database a generazione automatica con colonne che possono contenere frazioni di secondo

MySql57Dialect (e/o MySql57InnoDbDialect , a seconda della versione di Hibernate), il TIMESTAMP Il tipo SQL è già mappato su un TIMESTAMP(6) tipo di colonna del database:

registerColumnType( Types.TIMESTAMP, "datetime(6)" );

Ciò significa che la definizione di colonna predefinita dovrebbe supportare la precisione di microsecondi. La migliore linea d'azione è lasciare che Hibernate generi lo schema senza sovrascrivere la definizione della colonna. Per la maggior parte degli altri database, si degraderà gradualmente a un semplice TIMESTAMP .

Se in futuro desideri passare a un altro database che supporti anche la precisione di microsecondi, cerca il Dialect pertinente; probabilmente includerà il supporto per la funzione e, in caso contrario, puoi sempre personalizzarla.

Questo perché nel registerColumnType richiamare sopra, la precisione del TIMESTAMP è fisso a 6. Se vuoi essere in grado di personalizzarlo, lancia il tuo dialetto personalizzato (che si estende da MySql57Dialect ) e sovrascrivere la definizione con:

registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale

Sarai quindi in grado di sovrascrivere la lunghezza della colonna utilizzando length , precision o scale (dipende da cosa metti tra parentesi). Nota che il secondo argomento del metodo definisce la lunghezza massima possibile della colonna per questo particolare tipo di dati, quindi se vuoi ad es. precisione di nanosecondi, dovresti cambiarla in 9.