Hibernate - Ignorar integridade referencial na recuperação de um objeto  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
xgucax
JavaBaby
[Avatar]

Membro desde: 07/10/2006 09:06:36
Mensagens: 92
Offline

Senhores,
Na recuperação de um objeto composto da minha aplicação, a seguinte exceção é lançada:


O problema é que na tabela que representa o objeto composto, a chave estrangeira correspondente ao objeto componente aponta para um valor nulo. No meu caso, não existe um objeto Unidade com o ID 11, mas meu objeto composto aponta para ele.

Quando esta exceção é lançada, o objeto não é retornado. Gostaria saber se há algum modo de ignorar este erro de integridade (tendo em vista que a base do cliente não pode ser alterada por mim) trazendo o objeto componente com o valor nulo.

Desde já agradeço

Embrace and extend this _|_
<hr>
[MSN]
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

xgucax wrote:Senhores,
Na recuperação de um objeto composto da minha aplicação, a seguinte exceção é lançada:


O problema é que na tabela que representa o objeto composto, a chave estrangeira correspondente ao objeto componente aponta para um valor nulo. No meu caso, não existe um objeto Unidade com o ID 11, mas meu objeto composto aponta para ele.

Quando esta exceção é lançada, o objeto não é retornado. Gostaria saber se há algum modo de ignorar este erro de integridade (tendo em vista que a base do cliente não pode ser alterada por mim) trazendo o objeto componente com o valor nulo.

Desde já agradeço


Sua base de dados está com um sério problema de design... voce deve ativar as constraints do seu banco para evitar esse tipo de "XUNXO"...

se nao existe reg 11 , este campo OU deveria estar NULL OU deveria ter seu registro apagado...

Para evitar a carga de relacionamentos use LAZY=true no mapeamento... porem isso vai ser apenas paleativo... voce terá que corrigir isso.

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
xgucax
JavaBaby
[Avatar]

Membro desde: 07/10/2006 09:06:36
Mensagens: 92
Offline

chun wrote:
xgucax wrote:Senhores,
Na recuperação de um objeto composto da minha aplicação, a seguinte exceção é lançada:


O problema é que na tabela que representa o objeto composto, a chave estrangeira correspondente ao objeto componente aponta para um valor nulo. No meu caso, não existe um objeto Unidade com o ID 11, mas meu objeto composto aponta para ele.

Quando esta exceção é lançada, o objeto não é retornado. Gostaria saber se há algum modo de ignorar este erro de integridade (tendo em vista que a base do cliente não pode ser alterada por mim) trazendo o objeto componente com o valor nulo.

Desde já agradeço


Sua base de dados está com um sério problema de design... voce deve ativar as constraints do seu banco para evitar esse tipo de "XUNXO"...

se nao existe reg 11 , este campo OU deveria estar NULL OU deveria ter seu registro apagado...

Para evitar a carga de relacionamentos use LAZY=true no mapeamento... porem isso vai ser apenas paleativo... voce terá que corrigir isso.


Olá chun,
Eu sei que isto é um grande problema. Creio que não me expressei bem, mas a base de dados não é minha nem muito menos pode ser alterada por mim. a única coisa que posso fazer é CRUD sobre os registros (no caso de remoção me foi orientado que não alterasse os dados já existentes, ou seja, removesse apenas aquilo que insiro).

A opção de Lazy=true não é interessante para mim pois preciso destes objetos (para os que existam).
Pensei em criar algum método que parseasse estes erros por exemplo, criasse projeções que não contém os objetos componentes e tentasse inicializá-los. Caso houvesse sucesso na inicialização, o objeto seria retornado completo. Caso contrário, retornasse null.
O problema desta abordagem é que eu teria que reescrever muito código (código que teoricamente está correto para uma base correta). Aí gostaria de saber se não existe algum recurso 9de mapeamento, ou outro tipo) para isto
Abraços

Embrace and extend this _|_
<hr>
[MSN]
JotaJota
Java Ninja
[Avatar]

Membro desde: 11/05/2007 03:36:11
Mensagens: 256
Localização: Araraquara
Offline

Quando esta exceção é lançada, o objeto não é retornado. Gostaria saber se há algum modo de ignorar este erro de integridade (tendo em vista que a base do cliente não pode ser alterada por mim) trazendo o objeto componente com o valor nulo.


sim Existe uma maneira de Ignorar este erro:

Adicione no mapeamento annotation esse codigo:
@NotFound(action=NotFoundAction.IGNORE)

Lembrando que esse annotation apenas vai mascarar o erro.. e não trata-lo

Se alguem discorda por favor , comente
Atenciosamente,
[Email]
joaoorso
JavaTeenager
[Avatar]

Membro desde: 23/11/2006 21:48:55
Mensagens: 179
Localização: Curitiba - PR
Offline

No mínimo é mySQL.

João Ricardo Orso .
SCJP 5.0.
TSI

----------------------------------------------------------------
Os níveis de visibilidade do Java são: public, default, protected, private e " protected by Chuck Norris ", não tente acessar um atributo com este último modificador.


geidivan
JavaTeenager
[Avatar]

Membro desde: 11/09/2008 17:07:59
Mensagens: 172
Offline

joaoorso wrote:No mínimo é mySQL.


Este não é um problema do banco, mas sim do DBA que cria tabelas tão frágeis assim. Já encontrei o mesmo problema em um banco Oracle 10 em uma grande empresa.

O MySQL é um excelente banco de dados.

Geidivan J. de Brito
viniciuspadua
JavaEvangelist
[Avatar]

Membro desde: 25/11/2006 17:21:30
Mensagens: 370
Offline

comigo esta acontecendo o mesmo problema, em um relacionamento muitos para um! como resolvo esse caso ? creio que era apra retornar nulo!
jvds@bol.com.br
Java Ninja

Membro desde: 25/09/2006 09:30:24
Mensagens: 289
Offline

xgucax wrote:
chun wrote:
xgucax wrote:Senhores,
Na recuperação de um objeto composto da minha aplicação, a seguinte exceção é lançada:


O problema é que na tabela que representa o objeto composto, a chave estrangeira correspondente ao objeto componente aponta para um valor nulo. No meu caso, não existe um objeto Unidade com o ID 11, mas meu objeto composto aponta para ele.

Quando esta exceção é lançada, o objeto não é retornado. Gostaria saber se há algum modo de ignorar este erro de integridade (tendo em vista que a base do cliente não pode ser alterada por mim) trazendo o objeto componente com o valor nulo.

Desde já agradeço


Sua base de dados está com um sério problema de design... voce deve ativar as constraints do seu banco para evitar esse tipo de "XUNXO"...

se nao existe reg 11 , este campo OU deveria estar NULL OU deveria ter seu registro apagado...

Para evitar a carga de relacionamentos use LAZY=true no mapeamento... porem isso vai ser apenas paleativo... voce terá que corrigir isso.


Olá chun,
Eu sei que isto é um grande problema. Creio que não me expressei bem, mas a base de dados não é minha nem muito menos pode ser alterada por mim. a única coisa que posso fazer é CRUD sobre os registros (no caso de remoção me foi orientado que não alterasse os dados já existentes, ou seja, removesse apenas aquilo que insiro).

A opção de Lazy=true não é interessante para mim pois preciso destes objetos (para os que existam).
Pensei em criar algum método que parseasse estes erros por exemplo, criasse projeções que não contém os objetos componentes e tentasse inicializá-los. Caso houvesse sucesso na inicialização, o objeto seria retornado completo. Caso contrário, retornasse null.
O problema desta abordagem é que eu teria que reescrever muito código (código que teoricamente está correto para uma base correta). Aí gostaria de saber se não existe algum recurso 9de mapeamento, ou outro tipo) para isto
Abraços


Conseguiu resolver este problema ?

This message was edited 1 time. Last update was at 06/12/2011 09:24:57

[Email]
viniciuspadua
JavaEvangelist
[Avatar]

Membro desde: 25/11/2006 17:21:30
Mensagens: 370
Offline

quando o relacionamento não for obrigatório utilizo isso!

This message was edited 1 time. Last update was at 06/12/2011 09:26:12

jvds@bol.com.br
Java Ninja

Membro desde: 25/09/2006 09:30:24
Mensagens: 289
Offline

viniciuspadua wrote:quando o relacionamento não for obrigatório utilizo isso!



E para



Obrigado !!!
[Email]
viniciuspadua
JavaEvangelist
[Avatar]

Membro desde: 25/11/2006 17:21:30
Mensagens: 370
Offline

todos tem o optional!
jvds@bol.com.br
Java Ninja

Membro desde: 25/09/2006 09:30:24
Mensagens: 289
Offline

viniciuspadua wrote:todos tem o optional!


Nao @OneToMany
[Email]
jvds@bol.com.br
Java Ninja

Membro desde: 25/09/2006 09:30:24
Mensagens: 289
Offline

viniciuspadua wrote:todos tem o optional!


Mesmo colocando optional=true ainda continuo tomando exception

[Email]
viniciuspadua
JavaEvangelist
[Avatar]

Membro desde: 25/11/2006 17:21:30
Mensagens: 370
Offline

Mostre seu mapeamento
jvds@bol.com.br
Java Ninja

Membro desde: 25/09/2006 09:30:24
Mensagens: 289
Offline

Sobre o meu problema e o seguinte estava dando uma olhada na documentacao do Hibernate e reparei a seguinte situacao hoje estou usando.

load()

caso nao exista este ID retorno e exception org.hibernate.ObjectNotFoundException

caso se eu usar o get()



caso nao exista este ID retorno null

Isso esta certo e que no meu caso estou fazendo uma consulta pela primary key de meu banco para nao precisar criar CRITERIA resolvi usar o load para encurtar o tempo de desenvolvimento.
[Email]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team