sql >> Database >  >> RDS >> Mysql

MySQL DATETIME-precisie (joda-time, Hibernate, org.jadira.usertype, hbm2ddl)

Ik heb nog een oplossing gevonden waarmee je het MySQL-kolomdefinitiefragment niet hard kunt coderen in je @Column annotatie. Definieer uw eigen hibernate-dialect door org.hibernate.dialect.MySQLDialect te overschrijven :

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)" );
   }
}

en specificeer het als slaapstand eigenschap hibernate.dialect=org.yourproject.MySQL564PlusDialect (het dialect dat u wilt uitbreiden kan variëren, bijv. org.hibernate.dialect.MySQL5InnoDBDialect in plaats daarvan).

Nu kunt u de precisie van uw DATETIME . aanpassen vanuit @Column annotatie met behulp van length kenmerk:

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

wat DATETIME(3) . oplevert kolomdefinitie wat millisecondenprecisie betekent. Als je de eenvoudige DATETIME . nodig hebt (geen fractionele seconden), geef alleen geen lengte op. U kunt de waarde van length . gebruiken tot 6, wat een precisie van microseconden zou betekenen.

Als je toevallig een ander dialect gebruikt dan het bovenstaande (bijvoorbeeld het standaard org.hibernate.dialect.MySQLDialect of misschien een andere database), die je code niet zal breken:de length attribuut op @Column wordt genegeerd.

PS Het zou verstandiger zijn om gebruik te maken van de precision attribuut van @Column in plaats van length , maar eenvoudig vervangen van "datetime($l)" patroon met "datetime($p)" een in mijn eigen dialectimplementatie werkt niet zomaar.



  1. Tabeltype retourneren van een functie in PostgreSQL

  2. MariaDB 10 CentOS 7 bewegende datadir-ellende

  3. SQL Server-gegevens invoegen in Salesforce met een cursor

  4. Hoe meerdere rijen uit mysql te selecteren met één query en ze te gebruiken in php