Comments (7)
I tried to do PersistentLongList
as well. The problem is during schema generation, Hibernate is unable to create varchar[]
or bigint[]
columns properly: :(
Workaround:
@Column(columnDefinition="bigint[]") // TODO: workaround for https://github.com/JadiraOrg/jadira/issues/21#issuecomment-52621705
@Type(type = "org.soluvas.jpa.PersistentLongList")
private List<Long> contributors = new ArrayList<Long>();
Error:
07:06:33.635 [main] INFO o.h.tool.hbm2ddl.TableMetadata - HHH000261: Table found: buzz.twitteruser
07:06:33.635 [main] INFO o.h.tool.hbm2ddl.TableMetadata - HHH000037: Columns: [biggerprofileimageurl, revid, favouritescount, status_place_name, status_retweetcount, status_place_countrycode, profilebackgroundimageurl, profilebannermobileurl, status_id, profilebackgroundcolor, status_possiblysensitive, status_retweet, profilebannerurl, id, status_favorited, status_place_boundingboxtype, followerscount, profilebackgroundtiled, statusescount, profilebannerretinaurl, contributorsenabled, profilebackgroundimageurlhttps, protectedstate, status_place_fullname, originalprofileimageurl, profilebanneripadretinaurl, status_source, createdat, name, utcoffset, biggerprofileimageurlhttps, profileimageurl, status_text, profilelinkcolor, status_createdat, miniprofileimageurl, status_inreplytoscreenname, profileusebackgroundimage, timezone, translator, originalprofileimageurlhttps, description, friendscount, fetchtime, status_place_url, status_retweetedbyme, status_place_geometrytype, status_geolocation_longitude, status_inreplytouserid, status_truncated, status_geolocation_elevation, profilebanneripadurl, followrequestsent, profiletextcolor, lang, screenname, profilesidebarbordercolor, status_inreplytostatusid, profilesidebarfillcolor, verified, profilebannermobileretinaurl, status_place_id, profileimageurlhttps, geoenabled, url, listedcount, showallinlinemedia, status_place_streetaddress, miniprofileimageurlhttps, status_place_placetype, status_place_country, status_currentuserretweetid, location, status_geolocation_latitude]
07:06:33.635 [main] INFO o.h.tool.hbm2ddl.TableMetadata - HHH000108: Foreign keys: []
07:06:33.635 [main] INFO o.h.tool.hbm2ddl.TableMetadata - HHH000126: Indexes: [twitteruser_pkey, twitteruser_revid_idx, twitteruser_screenname_idx]
07:06:33.639 [main] ERROR o.h.tool.hbm2ddl.SchemaUpdate - HHH000299: Could not complete schema update
org.hibernate.MappingException: No Dialect mapping for JDBC type: 2003
at org.hibernate.dialect.TypeNames.get(TypeNames.java:87) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.dialect.TypeNames.get(TypeNames.java:118) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:330) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.mapping.Column.getSqlType(Column.java:229) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.mapping.Table.sqlAlterStrings(Table.java:404) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.cfg.Configuration.generateSchemaUpdateScriptList(Configuration.java:1209) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:212) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:178) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:522) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857) ~[hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.6.Final.jar:4.3.6.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) [hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) [spring-orm-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) [spring-orm-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) [spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) [spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) [spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:125) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.DefaultTestContext.getApplicationContext(DefaultTestContext.java:101) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:331) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:213) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:290) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.11.jar:na]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:292) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:233) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) [junit-4.11.jar:na]
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) [junit-4.11.jar:na]
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) [junit-4.11.jar:na]
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:176) [spring-test-4.0.6.RELEASE.jar:4.0.6.RELEASE]
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) [.cp/:na]
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) [.cp/:na]
from jadira.
tag @ceefour
from jadira.
This might work for a narrow use case of mapping List<String>
to varchar[]
:
package org.soluvas.jpa;
import java.io.Serializable;
import java.sql.Array;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.usertype.UserType;
/**
* <a href="http://stackoverflow.com/a/21984484">From Stackoverflow</a>.
* Being <a href="https://github.com/JadiraOrg/jadira/issues/21">proposed to Jadira</a>
*
* @author atang
*/
public class PersistentStringList implements UserType {
@Override
public int[] sqlTypes() {
return new int[] { Types.ARRAY };
}
@Override
public Class returnedClass() {
return List.class;
}
@Override
public boolean equals(Object x, Object y) throws HibernateException {
if (x == y) {
return true;
} else if (x == null || y == null) {
return false;
} else {
return x.equals(y);
}
}
@Override
public int hashCode(Object x) throws HibernateException {
return x.hashCode();
}
@Override
public Object nullSafeGet(ResultSet rs, String[] names,
SessionImplementor session, Object owner)
throws HibernateException, SQLException {
if (rs.wasNull()) {
return null;
}
final List<String> list = Arrays.asList( (String[]) rs.getArray(names[0]).getArray() );
return list;
}
@Override
public void nullSafeSet(PreparedStatement st, Object value, int index,
SessionImplementor session) throws HibernateException, SQLException {
if (value == null) {
st.setNull(index, Types.ARRAY);
} else {
List<String> castObject = (List<String>) value;
Array array = session.connection().createArrayOf("varchar", castObject.toArray(new String[] {}));
st.setArray(index, array);
}
}
@Override
public Object deepCopy(Object value) throws HibernateException {
return new ArrayList<>((List<String>) value);
}
@Override
public boolean isMutable() {
return true;
}
@Override
public Serializable disassemble(Object value) throws HibernateException {
// TODO Auto-generated method stub
return null;
}
@Override
public Object assemble(Serializable cached, Object owner)
throws HibernateException {
// TODO Auto-generated method stub
return null;
}
@Override
public Object replace(Object original, Object target, Object owner)
throws HibernateException {
return deepCopy(original);
}
}
from jadira.
That code has no dependency to PostgreSQL classes. Hopefully it's somewhat portable?
from jadira.
This:
@Override
public Object deepCopy(Object value) throws HibernateException {
return new ArrayList<>((List<String>) value);
}
should be:
@Override
public Object deepCopy(Object value) throws HibernateException {
return value != null ? new ArrayList<>((List<String>) value) : null;
}
from jadira.
Keeping this open for now, still considering whether to include
from jadira.
In the absence of a more complete PR, I propose to close this.
from jadira.
Related Issues (20)
- Switch to using MetadataContributor or TypeContributor for contributing types HOT 1
- DateTime Column with @Version attribute HOT 3
- Persisting FastMoney in JPA truncates amount
- Migrate from Jadira 7.0.0.CR1 to Java 17 HOT 3
- Cannot resolve method 'withZone' in 'OffsetDateTime'
- weld-core-parent dependency reference invalid xml
- TimeColumnLocalTimeMapper incorrectly uses "getNano()" HOT 1
- Jadira Usertypes with Java 10 throws java.lang.ArrayIndexOutOfBoundsException on initialisation HOT 7
- Where are lastest versions of Jadira published? HOT 2
- Update Indriya version to 1.2
- Document which version of usertypes is compatible with which version of Hibernate HOT 3
- Incompatible handling of timezones in 7.0.0.CR1 HOT 1
- Hibernate 5.3.7 compatibility HOT 2
- Joda Money 1.0 removes deprecated methods that Jadira uses
- PersistentDateTime mishandles dates that fall in DST HOT 1
- AbstractHeuristicUserType tries to instantiate deprecated TypeResolver with wrong parameters HOT 1
- StringColumnDateTimeMapper throws an Exception when Joda Datetime contains zone offset in hours, not Zone ID
- Conversion from mysql decimal column to curreny YEN fails. HOT 2
- Problem between sql Date and joda LocalDate conversion
- Status of jadira ? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jadira.