table02
idTable02 PK
idTable01 FK
numero //problema é este campo
Tenho que fazer com que quando eu adicione um registro na table02 ela insira automaticamente um incremento no campo numero, por exemplo, quando eu inserir o primeiro registro ele salva o numero com 1, quando salvar o segundo salvo como 2.
Só que esse incremento no campo numero é feito conforme o idTable01, cada idTable01 tem sua sequencia que é criada automaticamente.
Não entendi direito.
O idTable01 é uma PK, logo, os valores dele não se repetem (A não ser que este seja um dos componentes de uma PK composta…).
Para mim, isso parece um relacionamento 1 : n, onde cada registro constante na table02 terá um respectivo na table01, mas cada elemento da table01 poderá estar associado a mais de 1 registro da table02, certo?
Sendo assim, é preciso informar ao hibernate (xml ou anotation) que isto ocorre…
Se for o caso, no guj existem vários exemplos.
Caso contrário, bem, uma trigger poderia ser disparada e realizar esta ação…
altitdb
drsmachado,
o idTable01 é uma PK normal sem ser composta.
Esse relacionamento 1:n eu consigo fazer tranquilamente.
O problema é o campo numero que citei ali em cima… ele deve incrementar a cada registro na Table02, só que cada idTable01 tem sua sequencia…
idTable02 idTable01 numero
1 x 1 x 1
2 x 1 x 2
3 x 2 x 1
4 x 1 x 3
5 x 2 x 2
6 x 2 x 3
Repare bem na coluna numero a sequencia dela vai conforme o da coluna idTable01
xD~~
drsmachado
Deixa eu entender, os valores do campo número são criados como?
Já existe uma PK para a table02?
altitdb
Já existe uma PK na Table02.
o campo numero que eu não sei como inserir automaticamente.
Ele seria do formato numérico, um Long mais precisamente.
drsmachado
Se a PK é o campo número e o objetivo é sequencia-lo (1, 2, 3, 4…), há, no mysql, a opção de colocá-lo como auto_increment. No sql server há o modificador identity.
altitdb
Não, o campo numero não é nem PK e nem FK, é um campo sem chave alguma.
drsmachado
Então o próprio SGBD, independente de qual seja, irá bloquear a incrementação automática (só válida para PK).
Ou você faz controle deste campo pela aplicação e cria um select antes de realizar a inserção ou usa uma procedure ou trigger para fazer isto (caso o bd esteja sob sua tutela)
altitdb
Você tem algum exemplo de Trigger com Hibernate??
Procurei, mais os que achei não tinha uma explicação clara!!
xD~~
drsmachado
Triggers são ações disparadas quando um determinado tipo de ação é feito no BD.
Normalmente ocorrem depois de um insert, delete ou update e eventualmente após um select.
Este “gatilho” tem funções limitadas de acordo com o bd q vc usa.
Vamos supor que seja mysql, você pode criar uma trigger que seja executada após a operação de insert e que execute a ação de incrementar o campo numero.
Qual o bd em uso?
altitdb
Eu consigo criar as triggers no banco, só que quando eu faço o insert pelo hibernate, ele gera uma exception.
Por isso queria criar uma trigger pelo hibernate.
Estou usando postgreSql
xD~~
drsmachado
Hum…
Qual a exception?
altitdb
HibernateException…
Agora não tenho o log, esses dias que criei a Trigger e tentei fazer esse processo.
Dai lançou exception dae tive que fazer outras coisas e hoje que estou voltando a ver isso.
drsmachado
Seria bom ter o erro, pra saber onde ele ocorre.
altitdb
vou criar a trigger aqui e vou postar o erro…
drsmachado
Não sei se chegou a ver, mas acho que isto pode te ajudar