jruesga / phoenix-hibernate-dialect

An Apache Phoenix Hibernate dialect
Apache License 2.0
21 stars 5 forks source link

Can not set GenerationType #6

Open matkosoric opened 5 years ago

matkosoric commented 5 years ago

I am getting this error: ERROR 1200 (42Z00): Sequence already exists. tableName=HIBERNATE_SEQUENCE

I can not configure my Entity class to seamlessly update existing table. However, the program runs as expected and I am able to write to Phoenix/HBase, but I can not get rid of these errors, no mattar what strategy I choose. Of course, when I set ddl-auto to 'create', there is no error. And also, each time I restart program, the ID is continued from some other value (100, 1000, etc).

On Identity strategy I get: Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement

This is in Entity class: @GeneratedValue(strategy = GenerationType.SEQUENCE)

This in application.properties: spring.jpa.hibernate.ddl-auto=update

I have HBase 1.4.9., Phoenix 4.14.1, and Spring Boot 2.0.1

Here is stacktrace:



org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:226) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:312) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:460) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:892) [hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) [spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) [spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:390) [spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:377) [spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) [spring-orm-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1761) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1698) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:859) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
    at crypto.application.CryptoCompare.main(CryptoCompare.java:20) ~[classes/:na]
Caused by: org.apache.phoenix.schema.SequenceAlreadyExistsException: ERROR 1200 (42Z00): Sequence already exists. tableName=HIBERNATE_SEQUENCE
    at org.apache.phoenix.exception.SQLExceptionCode$11.newException(SQLExceptionCode.java:306) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.schema.Sequence.createSequence(Sequence.java:592) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.createSequence(ConnectionQueryServicesImpl.java:3830) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.schema.MetaDataClient.createSequence(MetaDataClient.java:1745) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.schema.MetaDataClient.createSequence(MetaDataClient.java:1736) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.compile.CreateSequenceCompiler$1.execute(CreateSequenceCompiler.java:239) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:408) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:391) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:390) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:378) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:1825) ~[phoenix-core-4.14.1-HBase-1.4.jar:4.14.1-HBase-1.4]
    at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-2.7.8.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-2.7.8.jar:na]
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final]
    ... 31 common frames omitted```
teikitel commented 5 years ago

Just remember that Phoenix SQL dialect is not fully SQL compliant. So it is no surprise updating your schema with Spring Boot/JPA/Hibernate doesn't work. My advise would be for you to build your datamodel directly with phoenix-sqlline and then use Spring Boot and JPA to query it.