Настройка SQL-диалекта при весенней загрузке - PullRequest
0 голосов
/ 11 мая 2018

Приложение построено с использованием JHipster / Spring Boot и PostgreSQL в качестве репозитория.Основываясь на этой статье , у меня есть пользовательский класс UserType и класс диалекта SQL как следующий

public class CustomPostgreSQLDialect extends PostgreSQL94Dialect {

  public CustomPostgreSQLDialect() {
    this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
  }
} 

И у меня есть его конфигурация в файле application.xml как

spring:
    ...
    jpa:
        open-in-view: false
        hibernate:
            ddl-auto: none
            naming:
                physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
                implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
        properties:
            hibernate.dialect: com.abc.customdatatypes.usertype.CustomPostgreSQLDialect

Для интеграционного теста

@Test
@Transactional
public void createProduct() throws Exception {
    int databaseSizeBeforeCreate = productRepository.findAll().size();

    // Create the Product
    restProductMockMvc.perform(post("/api/products")
        .contentType(TestUtil.APPLICATION_JSON_UTF8)
        .content(TestUtil.convertObjectToJsonBytes(product)))
        .andExpect(status().isCreated());

    // Validate the Product in the database
    List<Product> productList = productRepository.findAll();
    assertThat(productList).hasSize(databaseSizeBeforeCreate + 1);
    Product testProduct = productList.get(productList.size() - 1);
    assertThat(testProduct.getBrand()).isEqualTo(DEFAULT_BRAND);
    assertThat(testProduct.getName()).isEqualTo(DEFAULT_NAME);
    assertThat(testProduct.getKeywords()).isEqualTo(DEFAULT_KEYWORDS);
    assertThat(testProduct.getSpecs()).isEqualTo(DEFAULT_SPECS);
    assertThat(testProduct.getSeason()).isEqualTo(DEFAULT_SEASON);

    // Validate the Product in Elasticsearch
    verify(mockProductSearchRepository, times(1)).save(testProduct);
}

я получаю следующую ошибку:

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2000
at org.hibernate.dialect.TypeNames.get(TypeNames.java:70)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:101)
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:346)
at org.hibernate.mapping.Column.getSqlType(Column.java:231)
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateColumnType(AbstractSchemaValidator.java:156)
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:143)
at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42)
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89)
at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:191)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390)
... 68 more

Кажется, что конфигурация диалекта SQL не имеет никакого эффекта.Я добавляю ту же строку конфигурации в application-dev.yml, а также в application-prod.xml без удачи.

Есть ли способ узнать, влияет ли конфигурация диалекта SQL или нет?

1 Ответ

0 голосов
/ 11 мая 2018

Правильный ключ конфигурации -

spring.jpa.properties.hibernate.dialect

в то время как у вас фактически

spring.jpa.properties.dialect

Было бы проще, если бы вы использовали файл properties вместо yaml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...