Re:Hibernate problem: de MySQL para DB2

6 respostas
W

Olá,

No db2, a tabela é gerada normalmente, mas estou tendo problemas ao dar save de um objeto, acredito que no db2 exista outra forma de criar uma chave auto-increment ou sequence!
Alguém já passou por esse problema?!
E vc. criou o auto-increment no DB2 e, gostaria de saber qual versão do DB2 vc usa…pois vc. pode exportar seus dados do MySQL em formato texto salvar. E posteriormente criar uma tabela com a mesma estrutura da tabela original (MySQL) e importar esse dados para o DB2.

sds
William Silva

6 Respostas

W
Olá Victor, Simplificando a sua pergunta procure por uma literatura do DB2 no próprio site.:
An identity column is a numeric column in a table that automatically generates a unique numeric value in sequence for each row inserted. A unique identifier is often used in applications to identify a specific row. Unlike sequence objects, which we discuss in section 7.16, Sequences, identity columns are bound to the table they are defined on. There can be only one identity column per table. DB2 can generate the identity column values in two ways.

Generated always: The values are always generated by DB2. Applications are not allowed to provide an explicit value.

Generated by default: The values can be explicitly provided by an application; if no value is given, DB2 generates one. In this case, however, DB2 cannot guarantee the uniqueness of the value generated.

To create an identity column, use the CREATE TABLE statement with the GENERATED clause and make sure it contains the IDENTITY keyword because GENERATED can also be used to generate other values automatically that are not identity columns. Here is an example.

CREATE TABLE product (
       productno   INTEGER GENERATED ALWAYS AS
                           IDENTITY (START WITH 200 INCREMENT BY 1),
       description VARCHAR(50) )



The column productno is an INTEGER defined as an identity column that is always generated. The value generated will start from 200, and it will be incremented by 1. Let's perform a few INSERT statements and see the results obtained.


INSERT INTO product VALUES (DEFAULT,'banana');        --->inserts 200,banana
INSERT INTO product (description) VALUES ('apple');   --->inserts 201,apple
INSERT INTO product VALUES (300,'pear');              --->error SQL0798N
COMMIT;

INSERT INTO product (description) VALUES ('orange');  --->inserts 202,orange
ROLLBACK;

INSERT INTO product (description) VALUES ('plum');    --->inserts 203,plum
COMMIT;


The following query shows the final result.

SELECT * FROM product;

PRODUCTNO   DESCRIPTION
----------- ------------
        200 banana
        201 apple
        203 plum
sds. William Silva
W

Olá,
Comece por aqui e depois compre um bom livro sobre o DB2 Express C 9 em “ingles” ok…

DB2 Express-C Free to build, deploy, distribute … No limits.
http://www-306.ibm.com/software/data/db2/express/index.html

sds
William Silva

W

Ps. veja também " SequenceGenerator" na JPA com Hibernate.

Victor_Yuji_Maehira

Boa tarde!
Estou tendo um problema ao trocar meu banco de MySql para DB2 em uma aplicação usando hibernate 3
A chave de uma tabela era gerada usando @Id e @GeneratedValue
No db2, a tabela é gerada normalmente, mas estou tendo problemas ao dar save de um objeto, acredito que no db2 exista outra forma de criar uma chave auto-increment ou sequence!
Alguém já passou por esse problema?!
Valeu!

Victor_Yuji_Maehira

Bom dia!
Ainda estou no ambiente de desenvolvimento, por isso não tenho a preocupação de mantar os dados do MySQL! Só quero manter a mesma estrutura de dado! Acho que o problema está na geração da chave! Uma evidência é a query gerada.

No DB2:

No MySQL:

No MySQL, funciona normalmente e não tenho que me preocupar com a chave idEmpresa! No DB2, ele gera um valor default mas não insere no banco!

Em ambas as situações, a chave foi criada assim:

@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long idEmpresa;

Para o DB2 funcionar como no MySQL, quando se trata de chave auto-increment, acho que os parâmetros de @GeneratedValue são outros! Estou no caminho certo?! A versão do db2 é 8.1

Valeu!

Victor_Yuji_Maehira

Oi Willian!
Onde vc arrumou essa documentação?!
No site da ibm ou do hibernate?!
Vc pode passar o link?!
Valeu!!!

Criado 3 de abril de 2007
Ultima resposta 4 de abr. de 2007
Respostas 6
Participantes 2