2016-01-15 1 views
1

У меня есть приложение Grails 2.5.3, которое подключается к PostgreSQL, и я хочу сохранить объект java Date или Calendar в базе данных и включить часовой пояс ,Хранение даты, времени и часового пояса в PostgreSQL с Grails и GORM

На основе PostgreSQL Documentation типа метки времени по умолчанию делает не включают часовой пояс, так что вам нужно использовать timestamptz типа включить часовой пояс.

К сожалению, когда я пытаюсь установить это в закрытии класса домена, он терпит неудачу. Я пытаюсь использовать это:

createdDate type: 'timestamptz'

И ошибка я получаю это:

nested exception is org.hibernate.MappingException: Could not determine type for: timestamptz

К сожалению, список Hibernate types, кажется, не включают в себя ничего, что бы сопоставить это значение. Связанные с датами: date, time, timestamp, calendar, calendar-date. Я тестировал каждый из них, и ни один из них не создает нужный timestamp with time zone в Postgres.

Для этого есть статьи, которые говорят о создании пользовательского Hibernate UserType, но похоже, что это будет довольно распространенный случай использования, и я не могу не думать, что есть что-то, что должно позволить мне получить эту работу из коробки.

+0

Возможно сохранение временной метки и часового пояса в виде двух отдельных свойств/столбцов. –

ответ

2

Вы можете создать свой собственный диалект, а затем сопоставить тип Java с типом SQL. Вы можете увидеть, как это делается в плагине и подклассе grails-postgresql-extensions, которые наследуют или только по умолчанию postgresql.

package my.company 

import java.sql.Types 
import groovy.transform.CompileStatic 
import net.kaleidos.hibernate.PostgresqlExtensionsDialect 

@CompileStatic 
class SQDialect extends PostgresqlExtensionsDialect { 

    SQDialect() { 
     registerColumnType(Types.TIMESTAMP, 'timestamp with time zone') 
    } 
} 
+0

Фантастический! Большое спасибо за помощь! Быстрый вопрос. Я создал свой собственный диалект, расширяющий 'PostgreSQL82Dialect', есть ли преимущество в расширении' PostgresqlExtensionsDialect' вместо этого? – mnd

+0

С плагином вы можете использовать типы postgresl, такие как массивы, hstore, json и jsonb native types внутри вашего приложения Grails. Вы можете проверить документацию здесь: https://github.com/kaleidos/grails-postgresql-extensions Отказ от ответственности: Я являюсь создателем плагина. Если вы используете его и имеете некоторые проблемы, вопросы или предложения не стесняйтесь открывать проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^