GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Duvida com JPQL (JPA) Update / delete


#1

Boa tarde amigos,

estou escrevendo uma jpql que passa os valores de uma coluna para outra de toda a tabela.
entao ficou assim:

em.createQuery("UPDATE Coleta AS c SET c.coletaAnt = c.coletaAtu, c.fornecedorAnt = c.fornecedorAtu").executeUpdate();

mas ta lançando isso:

[color=darkred]Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b04-fcs (04/11/2008))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO TL_coleta (idColeta, coleta_ant, fornecedor_ant) SELECT t0.idColeta, t0.coleta_atu, t1.idfornecedor FROM coleta t0, coleta t2, fornecedor t1 WHERE (t1.idfornecedor = t2.fornecedor_atu)
Query: UpdateAllQuery()[/color]

nao entendo oq estou fazendo de errado !!!


#2

Olá pessoal... to ressussitando esse topico qui pois tenho um erro muito parecido... mas acho q ele devia estar na sessao de Persistência e Banco de Dados
a msg de erro é a seguinte :

Nov 28, 2009 10:48:46 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet vraptor2 threw exception
java.sql.BatchUpdateException: Duplicate entry '4' for key 'productList_id'
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1666)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1082)

dei uma pesquisaa na net e vi q o 4 corresponde a INT... no caso do amiguinho acima, o 1 corresponde a TINYINT... se bem q ele ta usando oracle a tebela q achei disso acho q era pra mySQL...
olha a tabela:

Type Bytes Minimum Value Maximum Value
(Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 - 32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

ela ta bonitinha nesse link aqui : http://arunma.com/2007/03/15/duplicate-entry-xxx-for-key-xxx-mysql-and-hibernate/

dai o cara fala q é algo de errado com a forma como eu declarei o meu auto increment... q o valor nao ta sendo suportado...
Essa tabela foi gerada automaticamente pelo hibernate, depois que eu fiz um relacionamento...
Ele gerou a tabela sem nenhum auto-increment... eu pesquisei como criava um campo assim e pus lá... mas o erro persistiu...

estou fazendo um ecommerce usando VRaptor 2 e hibernate... seguindo a apostila da caelum como base...

Se for ajudar, posso postar o relacionamento q eu fiz mais ou menos... mas ja segue como q meu GeraBanco criou essa tabela extra :

create table Purchase_Product (
    Purchase_id bigint not null,
    productList_id bigint not null,
    unique (productList_id)
)

e depois p alter :

alter table Purchase_Product 
    add index FK472C3B1F5B4735B (Purchase_id), 
    add constraint FK472C3B1F5B4735B 
    foreign key (Purchase_id) 
    references Purchase (id)

quando deu o erro, tentei dar mais esse comando na tabela :

ALTER TABLE purchase_product ADD id bigint not null auto_increment key;

como disse, o erro persistiu....

Obrigado e abraço a todos


#3