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:268)
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.
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.
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…
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.