我已经成功创建了Postgres的用户类型,并且可以成功读取和写入。Hibernate/JPA/HSQL:如何为用户类型创建Dialect映射ARRAY
@ org.hibernate.annotations.Type(类型= “com.xxx.datamodel.ext.FooType”) @Column(名称= “foo” 的,可为空=假) 私人INT []富
@ org.hibernate.annotations.Type(类型= “com.xxx.datamodel.ext.BarType”) @Column(名称= “栏”,可为空=假) 私人双[]栏
然而,当我尝试使用HSQLDialect(对单元测试)时,得到: 引起:org.hibernate.MappingException:否JDBC类型的方言映射:2003 at org.hibernate.dialect.TypeN ames.get(TypeNames.java:79) at org.hibernate.dialect.TypeNames.get(TypeNames.java:104) at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:314) at org。 hibernate.mapping.Column.getSqlType(Column.java:205) at org.hibernate.mapping.Table.sqlCreateString(Table.java:420) at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:895) (org.hibernate.tool.hbm2ddl.SchemaExport。(SchemaExport.java:105) at org.hibernate.impl.SessionFactoryImpl。(SessionFactoryImpl.java:353) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration。 java:1341) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) ...... 55多个
2003 java.sql.Types.Array 看起来它试图创建测试之前的模式失败,我不知道如何告诉HSQL创建适当的类型/模式。
我发现了另一个有点相关的职位,建议我延伸HSQLDialect并注册柱类型: ... registerColumnType(Types.ARRAY,FooType.class.getCanonicalName()); registerColumnType(Types.ARRAY,BarType.class.getCanonicalName()); ...
此方法的问题是每个SQL类型只允许有一个映射,并且它在int []和double []之间不能正确解析...不确定这是否是正确的方法。也许有其他方式来重写模式创建过程?
帮助!
PostgreSQL和HSQLDB方言不映射ARRAY类型(也没有我见过的其他方言)。行为改变可能是由于JDBC驱动程序对ARRAY类型支持的报告不同,并且Hibernate期望在驱动程序支持ARRAY类型时查找映射。 – fredt 2011-03-22 16:18:57
混乱的轻微位:Postgres的方言不支持ARRAY,一旦你创建一个用户类型:/ * * (非的Javadoc) * @see org.hibernate.usertype.UserType#returnedClass() */ @Override @SuppressWarnings(“unchecked”) public class returnedClass(){ return Double []。class; } /* * (非的Javadoc) * @see org.hibernate.usertype.UserType#的SQLType() */ @覆盖 公共INT []的SQLType(){ 返回SQL_TYPES; //Types.ARRAY } – user671435 2011-03-22 17:46:32
@ user671435什么是'SQL_TYPES'?尽管Hibernate可以与PostgreSQL数组一起工作,但是在生成模式**的过程中会出现什么问题** – 2014-08-19 11:40:32