Update em view com hibernate  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
yuripodho
JavaTeenager

Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline

Estou tentando realizar um update em uma view que tem uma coluna virtual.

A view foi criada da seguinte maneira:

CREATE VIEW WEBPACS_PRESET_WEBPACS AS
(SELECT CODUSUARIO, NULL CODCIDADE FROM USUARIO)

A view foi criada em função de ser um mesmo sistema para dois bancos de dados diferentes. Em um eu tenho a coluna CODCIDADE na tabela USUARIO e no outro banco não.
Quando estou conectado no banco que não possui a coluna CODCIDADE e dou um update no usuário ocorre o seguinte erro.
/
Caused by: java.sql.BatchUpdateException: ORA-01733: coluna virtual não permitida aqui

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10720)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:26

Ok, seria esperado que ocorresse esse erro pois não existe a coluna. Eu queria saber se pelo hibernate tem alguma maneira de desconsiderar update nessa coluna quando estou conectado ao banco que não possui a mesma ou alguma outra sugestão para resolver o problema. Espero ter sido claro.
Sds.


cada um, cada um. Mas tem cada um...
balrog
JavaEvangelist

Membro desde: 25/05/2003 16:42:17
Mensagens: 381
Localização: London
Offline

vejo duas alternativas
- ou vc add a coluna na tabela
- ou vc remove o mapeamento no seu entity

balrog
SCJA, SCJP, SCWCD, SCBCD, SCDJWS, SCEA

http://www.flickr.com/photos/planetadventure/sets/

Twitter @planetadventure
[WWW]
balrog
JavaEvangelist

Membro desde: 25/05/2003 16:42:17
Mensagens: 381
Localização: London
Offline

ok, espero que eu esteja completamente errado sobre isso, mas vc ta tentando fazer um update num registro de uma view? nao sou um especialista em oracle, mas ateh onde sei isso nao eh possivel. Se esse for o caso, tendo a chave do entity que vc quer atualizar vc deve carregar o mesmo e atualizar o entity e nao a view.

balrog
SCJA, SCJP, SCWCD, SCBCD, SCDJWS, SCEA

http://www.flickr.com/photos/planetadventure/sets/

Twitter @planetadventure
[WWW]
romarcio
JWizard
[Avatar]

Membro desde: 17/12/2008 10:05:49
Mensagens: 2434
Localização: Santa Maria/RS
Offline

balrog wrote:ok, espero que eu esteja completamente errado sobre isso, mas vc ta tentando fazer um update num registro de uma view? nao sou um especialista em oracle, mas ateh onde sei isso nao eh possivel. Se esse for o caso, tendo a chave do entity que vc quer atualizar vc deve carregar o mesmo e atualizar o entity e nao a view.


Realmente vc não pode fazer um update em uma view.

Isso é feito conforme os dados são atualizados ou inseridos nas tabelas que montam a view.

E no caso dessa coluna NULL CODCIDADE, se vc criasse um novo registro em USUARIOS, a view deveria inserir NULL na CODCIDADE, independente de vc ter ou não a Colunas em USUARIOS.

Bacharel em Sistemas de Informação.
Oracle Certified Professional, Java SE 6 Programmer

Blog | Facebook | Twitter
[WWW]
yuripodho
JavaTeenager

Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline

Eu consigo dar um update no campo codusuario, eu não consigo é dar update no campo "virtual" da view mesmo enviando null.
Na minha annotation eu consigo mapear como updatable=false, mas acho que não tenho como fazer isso dinamicamente de acordo com o banco que estou usando.
Acho que a solução para o que eu quero seria criar o campo na tabela mesmo....

cada um, cada um. Mas tem cada um...
balrog
JavaEvangelist

Membro desde: 25/05/2003 16:42:17
Mensagens: 381
Localização: London
Offline

Acho que a solução para o que eu quero seria criar o campo na tabela mesmo....

seria uma solucao parcial, mas como ja foi dito, update numa view NAO ROLA, vc ainda teria que ter seu entity carregado e fazer seu update nele, nao na view.

balrog
SCJA, SCJP, SCWCD, SCBCD, SCDJWS, SCEA

http://www.flickr.com/photos/planetadventure/sets/

Twitter @planetadventure
[WWW]
yuripodho
JavaTeenager

Membro desde: 20/08/2009 08:24:13
Mensagens: 160
Offline

CREATE VIEW VIEW_USUARIO AS
(SELECT ID,CODUSUARIO, NULL CODCIDADE FROM USUARIO)

UPDATE VIEW_USUARIO SET CODUSUARIO=2 WHERE ID=1

O sql acima eu afirmo que funciona, óbvio que a alteração será na tabela USUARIO.

cada um, cada um. Mas tem cada um...
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

É possível fazer UPDATES em VIEWS.. mas depende do banco e tem uma série de restrições... Não é qualquer update que irá funcionar..

Pode ser que o UPDATE que vc queira fazer está batendo nessas restricoes...


Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Se for só um update que vc precisa.. e o hibernate está cauando problemas.. use SQL normal.. sem hibernate

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team