0

I all over sudden have a hibernate exception and cannot find the issue. My app was actually working quite good so far but somehere/somehow/somewhen I must have changed something causing an error. But I don't find it.

Here the error:

2018-08-26 15:07:41.273  INFO 4580 --- [  restartedMain] org.hibernate.Version                    : HHH000412: Hibernate Core {5.3.2.Final}
2018-08-26 15:07:41.274  INFO 4580 --- [  restartedMain] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2018-08-26 15:07:41.330  INFO 4580 --- [  restartedMain] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2018-08-26 15:07:41.418  INFO 4580 --- [  restartedMain] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2018-08-26 15:07:41.845  INFO 4580 --- [  restartedMain] org.hibernate.tuple.PojoInstantiator     : HHH000182: No default (no-argument) constructor for class: com.trademerger.trading.observable.TradeDistributingUnitExchange (class must be instantiated by Interceptor)
Hibernate: drop table single_unit_abc if exists
Hibernate: drop table trade_distributing_unit_abc if exists
Hibernate: drop table trade_distributing_unit_abc_observer_list if exists
Hibernate: drop table user_data_storage if exists
Hibernate: drop sequence if exists hibernate_sequence
Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: create table single_unit_abc (dtype varchar(31) not null, observer_id bigint not null, amount_of_coins_bought double not null, bid_active boolean not null, buy_profit double not null, id double not null, last_price double not null, order_number bigint not null, percantage_this_bot_can_take_frombtc double not null, sell_active boolean not null, sell_price double not null, sell_profit double not null, time_of_last_bid_order bigint not null, stop_received varchar(255), trade_distributing_unit_abc_objectid bigint, primary key (observer_id))
Hibernate: create table trade_distributing_unit_abc (dtype varchar(31) not null, objectid bigint not null, command integer, group varchar(255), reduce boolean,  primary key (objectid))
2018-08-26 15:07:41.931  WARN 4580 --- [  restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "create table trade_distributing_unit_abc (dtype varchar(31) not null, objectid bigint not null, command integer, group varchar(255), reduce boolean, primary key (objectid))" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table trade_distributing_unit_abc (dtype varchar(31) not null, objectid bigint not null, command integer, group varchar(255), reduce boolean, primary key (objectid))" via JDBC Statement

Caused by: org.h2.jdbc.JdbcSQLException: Syntax Fehler in SQL Befehl "CREATE TABLE TRADE_DISTRIBUTING_UNIT_ABC (DTYPE VARCHAR(31) NOT NULL, OBJECTID BIGINT NOT NULL, COMMAND INTEGER, GROUP[*] VARCHAR(255), REDUCE BOOLEAN, PRIMARY KEY (OBJECTID)) "; erwartet "identifier"
Syntax error in SQL statement "CREATE TABLE TRADE_DISTRIBUTING_UNIT_ABC (DTYPE VARCHAR(31) NOT NULL, OBJECTID BIGINT NOT NULL, COMMAND INTEGER, GROUP[*] VARCHAR(255), REDUCE BOOLEAN,  PRIMARY KEY (OBJECTID)) "; expected "identifier"; SQL statement:
create table trade_distributing_unit_abc (dtype varchar(31) not null, objectid bigint not null, command integer, group varchar(255), reduce boolean, primary key (objectid)) [42001-197]


Hibernate: create table trade_distributing_unit_abc_observer_list (trade_distributing_unit_abc_objectid bigint not null, observer_list_observer_id bigint not null)
Hibernate: create table user_data_storage (fee_storage_id bigint not null, api_key varchar(255), api_secret varchar(255), crash_indicator_active boolean not null, fee double not null, fee_must_be_paid boolean not null, lending_on boolean not null, password varchar(255), time_of_last_payment bigint not null, username varchar(255), volume_indicator_active boolean not null, primary key (fee_storage_id))
Hibernate: alter table trade_distributing_unit_abc_observer_list add constraint UK_2uiqrt4b7kfuy0tlp5l7vvfyq unique (observer_list_observer_id)
Hibernate: alter table single_unit_abc add constraint FKt4jg8bdgi9hnjp6fx4mgs27n foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc
2018-08-26 15:07:41.941  WARN 4580 --- [  restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "alter table single_unit_abc add constraint FKt4jg8bdgi9hnjp6fx4mgs27n foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table single_unit_abc add constraint FKt4jg8bdgi9hnjp6fx4mgs27n foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc" via JDBC Statement

Caused by: org.h2.jdbc.JdbcSQLException: Tabelle "TRADE_DISTRIBUTING_UNIT_ABC" nicht gefunden
Table "TRADE_DISTRIBUTING_UNIT_ABC" not found; SQL statement:
alter table single_unit_abc add constraint FKt4jg8bdgi9hnjp6fx4mgs27n foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc [42102-197]


Hibernate: alter table trade_distributing_unit_abc_observer_list add constraint FK1xf8ji3rqb6qqncywcju013qo foreign key (observer_list_observer_id) references single_unit_abc
Hibernate: alter table trade_distributing_unit_abc_observer_list add constraint FK8yjbuf5pqdfnn4rwlt9ghfgl6 foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc
2018-08-26 15:07:41.946  WARN 4580 --- [  restartedMain] o.h.t.s.i.ExceptionHandlerLoggedImpl     : GenerationTarget encountered exception accepting command : Error executing DDL "alter table trade_distributing_unit_abc_observer_list add constraint FK8yjbuf5pqdfnn4rwlt9ghfgl6 foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc" via JDBC Statement

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table trade_distributing_unit_abc_observer_list add constraint FK8yjbuf5pqdfnn4rwlt9ghfgl6 foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc" via JDBC Statement

Caused by: org.h2.jdbc.JdbcSQLException: Tabelle "TRADE_DISTRIBUTING_UNIT_ABC" nicht gefunden
Table "TRADE_DISTRIBUTING_UNIT_ABC" not found; SQL statement:
alter table trade_distributing_unit_abc_observer_list add constraint FK8yjbuf5pqdfnn4rwlt9ghfgl6 foreign key (trade_distributing_unit_abc_objectid) references trade_distributing_unit_abc [42102-197]

this class

@Entity
public abstract class TradeDistributingUnitAbc {

    //@OneToMany(mappedBy = "tradeDistributingUnitAbc", cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @OneToMany
    private List<SingleUnitAbc> observerList = Collections.synchronizedList(new LinkedList<>());

    @Transient
    private final Logger logger = LoggerFactory.getLogger(TradeDistributingUnitAbc.class);


    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long objectID;

    private Commands command;


    private String group = "";


    public TradeDistributingUnitAbc() {
    }

}

application.properties. For testing purposes I have added create-drop usually I use update but it doesn't change anything.

spring.datasource.url=jdbc:h2:file:~/tmv2;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.username=admin
spring.datasource.password=password
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

POM-dependencies: Last what I changed here was to remove <scope>runtime</scope> at the H2 database dependency. But even reverse it results in the same error.

<dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <version>2.0.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.197</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1-1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
        <!--      <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-jdbc</artifactId>
                  <version>5.0.7.RELEASE</version>
              </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.3.2.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.0.3.RELEASE</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.21.0</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.powermock/powermock-module-junit4 -->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito -->
        <!-- https://mvnrepository.com/artifact/org.powermock/powermock-core -->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-core</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito2 -->
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito2</artifactId>
            <version>2.0.0-beta.5</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy -->
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy</artifactId>
            <version>1.8.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy-agent -->
        <dependency>
            <groupId>net.bytebuddy</groupId>
            <artifactId>byte-buddy-agent</artifactId>
            <version>1.8.17</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.objenesis/objenesis -->
        <dependency>
            <groupId>org.objenesis</groupId>
            <artifactId>objenesis</artifactId>
            <version>2.6</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
Anna Klein
  • 1,906
  • 4
  • 27
  • 56
  • well... the error message seems pretty clear `Table "TRADE_DISTRIBUTING_UNIT_ABC" not found`. So you successfully connected to the database, but the table you're trying to use does not exist. Of course your configuration suggests that you should automatically create the database, but I'm not so sure if that includes the automatic updates. Would it be possible for you to remove the database file and try to run it again? – Kamil Janowski Aug 26 '18 at 13:41
  • Yes I considered this already and tried it with a fresh DB but get the same error no matter if I use update/create-drop with a new/old table. Always the same error. – Anna Klein Aug 26 '18 at 13:43
  • correct me if I'm wrong, but this is a new table that you just want to add now, right? Did you remember to add it to hibernate.cfg.xml ? – Kamil Janowski Aug 26 '18 at 13:44
  • or... in spring boot it is possible to configure the hibernate to automatically detect the entities and then you don't need the hibernate.cfg.xml, but I think they still have to be all placed in appropriate packages for spring to find them, so if you use the automatic detection, make sure the package is properly scanned – Kamil Janowski Aug 26 '18 at 13:46
  • what is about that part: Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "CREATE TABLE TRADE_DISTRIBUTING_UNIT_ABC (DTYPE VARCHAR(31) NOT NULL, OBJECTID BIGINT NOT NULL, COMMAND INTEGER, GROUP[*] VARCHAR(255), REDUCE BOOLEAN, PRIMARY KEY (OBJECTID)) "; expected "identifier"; – Anna Klein Aug 26 '18 at 13:48
  • well... for starters " COMMAND INTEGER" whereas in your case it's an object. That can be a problem. – Kamil Janowski Aug 26 '18 at 13:53

1 Answers1

8

Your error is because of this statement in your class i think :

private String group = "";

I ran hibernate sql query given in logs without this and it ran successfully. Give it a shot.

Edit : It should be like this way :

private String group; 

Edit 1 : "GROUP" is a SQL reserved keyword and should not be used as an attribute name. Check here

Vivek Bansal
  • 216
  • 2
  • 8
  • Wow, this is it! How did you come to the idea to test that field? I could sit here 10 more hours and wouldn't think about this specific field. – Anna Klein Aug 26 '18 at 13:52
  • Actually, its pretty simple, First i checked hibernate logs and copied sql statement that it is trying to execute. Then i got instinct that group[*] varchar(255) seems to be something fishy... and then i removed it and it ran successfully ... after looking back to your code i realised you dont need to initialise(just declare) anything in your entity class. Cheers :) – Vivek Bansal Aug 26 '18 at 13:55
  • 2
    @AnnaKlein `GROUP` is a typical SQL reserved word and you should avoid it as an attribute name. See e.g. [here](https://stackoverflow.com/questions/19758467/h2-database-column-name-group-is-a-reserved-word) – Marmite Bomber Aug 26 '18 at 14:01