Я успешно создал типы пользователей с Postgres и могу успешно читать и писать.
@org.hibernate.annotations.Type(type = "com.xxx.datamodel.ext.FooType" )
@Column(name = "foo", nullable = false)
private int[] foo
@org.hibernate.annotations.Type(type = "com.xxx.datamodel.ext.BarType" )
@Column(name = "bar", nullable = false)
private double[] bar
Однако, когда я пытаюсь использовать HSQLDialect (для модульного тестирования), я получаю:
Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
at org.hibernate.dialect.TypeNames.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)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:105)
at org.hibernate.impl.SessionFactoryImpl.<init>(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 more
2003 - это java.sql.Types.Array Похоже, что при попытке создать схему перед тестами происходит сбой, и я не уверен, как сказать HSQL создать правильный тип / схему.
Я нашел еще один пост, в котором предлагалось расширить HSQLDialect и зарегистрировать тип столбца:
registerColumnType(Types.ARRAY,
FooType.class.getCanonicalName());
registerColumnType(Types.ARRAY,
BarType.class.getCanonicalName());
Проблема этого подхода заключается в том, что для каждого типа SQL разрешено только одно сопоставление, и оно не разрешаетсяправильно между int[]
и double[]
.Не уверен, что это даже правильный подход.Возможно, есть какой-то другой способ переопределить процесс создания схемы?