Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dokładność MySQL DATETIME (joda-time, Hibernate, org.jadira.usertype, hbm2ddl)

Znalazłem jeszcze jedno rozwiązanie, które pozwala nie kodować na stałe fragmentu definicji kolumny MySQL w twoim @Column adnotacja. Zdefiniuj własny dialekt hibernacji, zastępując org.hibernate.dialect.MySQLDialect :

package org.yourproject;

import java.sql.Types;
import org.hibernate.dialect.MySQL5Dialect;

public class MySQL564PlusDialect extends MySQL5Dialect {
   public MySQL564PlusDialect() {
      super();
      registerColumnType( Types.TIMESTAMP, 6, "datetime($l)" );
   }
}

i określ go jako właściwość hibernate hibernate.dialect=org.yourproject.MySQL564PlusDialect (dialekt, który chcesz rozszerzyć, może się różnić, np. org.hibernate.dialect.MySQL5InnoDBDialect zamiast tego).

Teraz możesz dostosować precyzję swojej DATETIME z wnętrza @Column adnotacja za pomocą length atrybut:

@Basic(optional=false)
@Column(name="moment", length=3)
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() {
 ...

co wygeneruje DATETIME(3) definicja kolumny oznaczająca milisekundową precyzję. Jeśli potrzebujesz prostego DATETIME (bez ułamków sekund), po prostu nie określaj długości. Możesz użyć wartości length do 6, co oznaczałoby precyzję w mikrosekundach.

Jeśli zdarzy ci się użyć innego dialektu niż powyższy (na przykład standardowego org.hibernate.dialect.MySQLDialect a może jakaś inna baza danych), która nie złamie Twojego kodu:length atrybut w @Column zostaną zignorowane.

PS Rozsądniej byłoby wykorzystać precision atrybut @Column zamiast length , ale proste zastąpienie "datetime($l)" wzorzec z "datetime($p)" jeden w mojej własnej implementacji dialektu nie działa od razu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego MySQL nie używa indeksu do lepszego porównania?

  2. Jak sformatować liczby tak, aby miały tylko dwa miejsca po przecinku?

  3. Jak zainstalować MySQL 8 w systemie Windows

  4. LEWE DOŁĄCZ w ZF2 za pomocą TableGateway

  5. Nie można połączyć się z MySQL w Cloudbees CommunicationsException:Błąd łącza komunikacyjnego