Hibernate @generatedvalue for HSQLDB

后端 未结 2 1033
悲&欢浪女
悲&欢浪女 2021-01-02 09:41

I have the following definition for an id field in an entity that is mapped to a table in HSQLDB.

...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Colu         


        
2条回答
  •  执笔经年
    2021-01-02 09:52

    Doesn't a generation strategy of auto imply that the provider (hibernate in this case) will automatically choose the correct approach and do all the heavy lifting as needed (create sequence, use a native approach or whatever works for that particular platform)? Is my understanding incorrect?

    It does in theory (it defaults to IDENTITY with HSQLDB) and it works for me. This begs the following questions:

    • What dialect are you using (just in case)?
    • How did you create the table?
    • Can you show the DDL (activate the logging of org.hibernate.tool.hbm2ddl if required)?
    • How do you insert (through Hibernate's API, right?)?

    Here is a sample DDL for an entity Foo when using HSQLDB:

    create table Foo (
        id bigint generated by default as identity (start with 1), 
        bar varchar(100),
        primary key (id)
    )
    

    I created the table using the HSQL DB manager. Just normal create table address... I had not set the id column as identity in my case - just set it as primary key.

    Then you have your answer, use an IDENTITY column.

    While Hibernate does choose the right strategy and does generate the appropriate INSERT statements (passing null into the id which is expected to be persisted into an IDENTITY column), it won't create or alter your physical model if you don't use the DDL generation and export capabilities.

提交回复
热议问题