Hibernate + @GenerateValue

6 respostas
H

Galera estou com um problema que talvez seja simples para muitos.

Tenho um Id de um tabela qualquer, e no BD o campo id tem ?precision = 2? ( NUMBER(2) ).

Mas o @GenerateValue esta gerando um numero maior que a coluna.

Por exempo:
Meu id recebe um numero no Maximo 99 e o @GenerateValue gera um numero 108.

Erro:
Caused by: java.sql.BatchUpdateException: ORA-01438: valor maior que a precisÒo especificada usado para esta coluna

COMO FAÇO PARA O @GenerateValue GERAR UM NÚMERO MENOR QUE 100?

@Entity
@Table(name="TIPO_COMUNICACAO")
public class TipoComunicacao implements BaseEntity<Long> {
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private Long id;

6 Respostas

walacy

Tenta isso…

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private long id;

http://www.oracle.com/technology/products/ias/toplink/jpa/howto/id-generation.html

H

Walacy,eu já experimentei esta abordagem…

@Id  
   @GeneratedValue(strategy=GenerationType.SEQUENCE)  
   private long id;

Como também já tentei, essa:

@Id
    @GeneratedValue(generator="InvTab")
    @TableGenerator(name="InvTab", table="TIPO_COMUNICACAO",
        pkColumnName="id", valueColumnName="ID_VAL",
        pkColumnValue="INV_GEN")
    private Long id;

E todas até o momento, gera um número maior que o campo na tabela…

Se tiver mais alguma idéia?!

walacy

Sugestão:

http://72.5.124.55/javaee/5/docs/api/javax/persistence/GenerationType.html

Veja qual o tipo de geração adequada para o seu caso…

Se o banco gera sozinho, acho que seria IDENTITY…

nellson.maia

No meu caso já usei coisas assim:

@Entity
@SequenceGenerator(name = "seq_appointment_id_gen", sequenceName = "seq_appointment_id", allocationSize = 1)
public class Appointment implements Recordable {
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_appointment_id_gen")
	private long id;
...

}

Para banco postgreSQL funciona legal.

H

Assim, eu acho que esta meio confuso…
Ele gera um numero, sem problemas…
Mas na minha tabela, é um campo com NUMBER(2).

E ele gera um número maior que 99.

Ai é onde o erro ocorre.

2010-05-05 14:51:12,910 DEBUG [org.hibernate.id.SequenceGenerator] Sequence identifier generated: 142
  .
  .
  .

2010-05-05 14:51:12,960 WARN  [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1438, SQLState: 22003
2010-05-05 14:51:12,960 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01438: valor maior que a precisão especificada

usado para esta coluna

nesse momento ele gerou o número 142… sendo que a tabela esta vazia…

O ideal é que ele gerasse 1, 2, 3, 4, 71, 43, 33… com a condisão que ?X<100? (x = numero gerado)

H

Ninguém?

Criado 5 de maio de 2010
Ultima resposta 5 de mai. de 2010
Respostas 6
Participantes 3