Satheesh Cheveri
Satheesh Cheveri

Reputation: 3679

auto creation of sequence using hibernate tool

I wanted to to generate sequence using hibernate tool ( pojo to sql). And definitely it works fine.

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
@SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ" )
@Column(name="id")
public Long getId() {
    return id;
}

This code generates below sql

create sequence RTDS_ADSINPUT_SEQ;

The problem is I wanted to specify properties like

INCREMENT BY,NOCACHE CYCLE

and the final ddl script should be some thing like below

CREATE SEQUENCE  RTDS_ADSINPUT_SEQ  MINVALUE 1 MAXVALUE
999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE  ORDER  CYCLE ;

But as far I saw hibernate only support name, sequncename,allocation,initialvalue

Please advice me if I can include those properties as annotation in the pojo.

Upvotes: 10

Views: 11684

Answers (2)

Ajay Sharma
Ajay Sharma

Reputation: 868

I think you are looking for something like this

    <id name="pk_field" column="column_name">
        <generator class="sequence">
            <param name="sequence">sequence_name</param>
            <param name="parameters">START WITH 5 INCREMENT BY 10</param>
        </generator>
    </id>

Upvotes: 0

tine2k
tine2k

Reputation: 1541

I looked it up in the Hibernate sources (4.2.7). It is not possible to specify this with an annotation (neither JPA nor Hibernate).

However you can provide your own Dialect to achieve this.

public class MyOwnOracleDialect extends Oracle10gDialect {

    @Override
    protected String getCreateSequenceString(final String sequenceName, final int initialValue, final int incrementSize)
        throws MappingException {
        String createSequenceString = super.getCreateSequenceString(sequenceName, initialValue, incrementSize);
        return createSequenceString + " NOCACHE ORDER CYCLE"; // modify this string as you like
    }
}

Have an entity like this

@Entity
public class MyEntity {

    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqid-gen")
    @SequenceGenerator(name = "seqid-gen", sequenceName = "RTDS_ADSINPUT_SEQ", allocationSize = 1, initialValue = 0)
    @Column(name="id")
    private Long id;

    // ...

}

You can set your new Dialect as described in the Hibernate doc (http://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch03.html#configuration-optional-dialects)

Upvotes: 7

Related Questions