| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 10:36:50
|
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... |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 10:56:36
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 11:00:04
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 11:16:30
|
romarcio
JWizard
![[Avatar]](/images/avatar/0dc800465c816add16e0b6d63be91f49.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 11:25:40
|
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... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 11:56:33
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 12:08:05
|
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... |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 12:24:44
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 12:27:39
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
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
 |
|
|
 |
|
|