Приложение построено с использованием 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 или нет?