quinta-feira, 2 de abril de 2009

Utilizando @SequenceGenerator do hibernate com o Firebird

Para utilizar Sequence do firebird, basta criar o generator no banco de dados:

"CREATE SEQUENCE GEN_USUARIO_ID;"

E depois disso, utilizar este nome na entidade, mapeando da seguinte forma:


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@SequenceGenerator(name = "INC_USUARIO", sequenceName = "GEN_USUARIO_ID")
@Table(name = "usuario")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "INC_USUARIO")
private Long id;

@Column
private String nome;


E o mapeamento do arquivo hibernate.cfg.xml fica normal.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="Hibernate" >
<!-- Database connection settings -->
<property name="connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
<property name="connection.url">jdbc:firebirdsql:localhost/3050:E:\Desenv\Base\base.fdb</property>
<property name="connection.username">sysdba</property>
<property name="connection.password">masterkey</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.FirebirdDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- property name="hibernate.hbm2ddl.auto">create</property> -->

<mapping class="br.com.viartes.entities.User" />
</session-factory>
</hibernate-configuration>

3 comentários:

Sandro Machado disse...

Salvou minha Vida!!

Sandro Machado disse...
Este comentário foi removido pelo autor.
Unknown disse...

Encontrei seu post tentando fazer funcionar um generator ao migrar do Hibernate 4.2.21 pro 5.0.9.

Além dos itens mencionados, foi necessário definir o atributo allocationSize da anotação @SequenceGenerator com o mesmo valor usado para incrementar o generator (no meu caso 1), caso contrário era gerado um número muito acima do esperado.