我使用Spring Data,並決定創建可以在Hibernate實體中使用的新自定義數據類型。我檢查了文檔並選擇BasicType
並根據此official user guide實施它。使用Spring Data時應該如何註冊自定義Hibernate 5數據類型(BasicType)?
我希望能夠在其類名下注冊類型,並且能夠在實體中使用新類型,而不需要註解@Type
。不幸的是,我無法參照MetadataBuilder
或Hibernate配置來註冊新類型。有沒有辦法如何在Spring Data中獲得它?看起來,Hibernate的初始化對用戶來說是隱藏的,不容易被訪問。我們用下面的類來初始化JPA:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
transactionManagerRef = "transactionManager",
basePackages = {
"..." // omitted
}
)
public class JpaConfiguration implements TransactionManagementConfigurer {
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean configureEntityManagerFactory(
DataSource dataSource,
SchemaPerTenantConnectionProviderImpl provider) {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setPersistenceUnitName("defaultPersistenceUnit");
entityManagerFactoryBean.setDataSource(dataSource);
entityManagerFactoryBean.setPackagesToScan(
"..." // omitted
);
entityManagerFactoryBean.setJpaProperties(properties(provider));
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
return entityManagerFactoryBean;
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new JpaTransactionManager();
}
private Properties properties(SchemaPerTenantConnectionProviderImpl provider) {
Properties properties = new Properties();
// omitted
return properties;
}
}
我發現了大量的有關辦法如何與Hibernate的配置對象做的文章,但這個指的是Hibernate的3和4。我還發現方式如何通過做休眠org.hibernate.integrator.spi.Integrator
但當我根據我發現的文章使用它時,我將得到異常與消息「org.hibernate.HibernateException:無法在此時更改TypeRegistry」 什麼是在Spring數據中註冊自定義類型的正確方法?
花了大約20秒的時間詢問和回答,我想「*我終於明白了*」是一個笑話,對吧? ; P – Mistalis
我昨天寫了這個問題,但沒有發佈。今天我明白了。我決定發佈與其他人會遇到同樣問題的答案。對我來說,這個職位之前有延遲;) – xMort