MySql57Dialect
(và / hoặc MySql57InnoDbDialect
, tùy thuộc vào phiên bản Hibernate), TIMESTAMP
Kiểu SQL đã được ánh xạ tới TIMESTAMP(6)
loại cột cơ sở dữ liệu:
registerColumnType( Types.TIMESTAMP, "datetime(6)" );
Điều này có nghĩa là định nghĩa cột mặc định phải hỗ trợ độ chính xác micro giây. Cách tốt nhất của hành động là cho phép Hibernate tạo lược đồ mà không ghi đè định nghĩa cột. Đối với hầu hết các cơ sở dữ liệu khác, nó sẽ giảm chất lượng thành một TIMESTAMP
đơn giản .
Nếu bạn muốn chuyển sang một cơ sở dữ liệu khác trong tương lai cũng hỗ trợ độ chính xác micro giây, hãy tra cứu Dialect
có liên quan; nó có thể sẽ bao gồm hỗ trợ cho tính năng và nếu không, bạn luôn có thể tùy chỉnh nó.
Điều này là do trong registerColumnType
gọi ở trên, độ chính xác của TIMESTAMP
được cố định ở mức 6. Nếu bạn muốn có thể tùy chỉnh nó, hãy triển khai phương ngữ tùy chỉnh của riêng bạn (mở rộng từ MySql57Dialect
) và ghi đè định nghĩa bằng:
registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale
Sau đó, bạn sẽ có thể ghi đè độ dài cột bằng cách sử dụng length
, precision
hoặc scale
(tùy thuộc vào những gì bạn đặt bên trong dấu ngoặc). Lưu ý rằng đối số thứ hai của phương thức xác định độ dài cột tối đa có thể có cho kiểu dữ liệu cụ thể này, vì vậy nếu bạn muốn, ví dụ:độ chính xác nano giây, bạn nên thay đổi nó thành 9.