Mysql
 sql >> база данни >  >> RDS >> Mysql

Прецизност на MySQL DATETIME (joda-time, Hibernate, org.jadira.usertype, hbm2ddl)

Намерих още едно решение, което позволява да не се кодира твърдо фрагмент от дефиниция на колона на MySQL във вашия @Column анотация. Дефинирайте своя собствен диалект за хибернация, като замените 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)" );
   }
}

и го посочете като свойство hibernate hibernate.dialect=org.yourproject.MySQL564PlusDialect (диалектът, който искате да разширите, може да варира, напр. org.hibernate.dialect.MySQL5InnoDBDialect вместо това).

Сега можете да регулирате точността на вашия DATETIME от @Column анотация с помощта на length атрибут:

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

което ще произведе DATETIME(3) дефиниция на колона, което означава точност в милисекунди. Ако имате нужда от простия DATETIME (без частични секунди), просто не посочвайте дължина. Можете да използвате стойност на length до 6, което би означавало микросекунди точност.

Ако случайно използвате диалект, различен от горния (например стандартния org.hibernate.dialect.MySQLDialect или може би някаква друга база данни), която няма да наруши вашия код:length атрибут на @Column ще бъдат игнорирани.

P.S. Би било по-разумно да се използва precision атрибут на @Column вместо length , но проста замяна на "datetime($l)" шаблон с "datetime($p)" един в моя собствен диалектна реализация не работи нарочно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Единични кавички, двойни кавички и обратни кавички в MySQL

  2. как да напишем заявка въз основа на нейната колона

  3. MySQL цели в работния процес на Luigi

  4. Използване на MySQL IF EXISTS

  5. Как да накарате вашето булево търсене в пълен текст да вземе термина C++?