| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2012 19:46:05
|
cristianovieira
Debugger
Membro desde: 10/03/2011 15:57:35
Mensagens: 52
Offline
|
Olá boa noite venho mais uma vez pedir auxilio aos Srs. dessa vez para tratar de uma duvida sobre constraint. Pois bem analise o cenário abaixo:
Telefone (Classe Abstrata)
TelPessoa
Pessoa(Classe Abstrata)
Cliente
Bom a 5 minutos atraz recebi a exception "No row with the given identifier exists", isso por que algum registro de telefone estava apontando para uma pessoa que não existia, presumi que seria por que o relacionamento via anotation esta sendo feito assim:
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="pess_id", updatable=true, insertable=true)
@Fetch(FetchMode.JOIN)
private Pessoa pessoa;
Ou seja apontando para uma classe abstrata, tenho N pessoas tais como "Cliente", "Fornecedor", "Motorista" etc... Como a aplicação ainda está em fase de implementação posso fazer qualquer modificação as perguntas são:
1º Seria o caso de ter um relacionamento UniDirecional para que as pessoas apontem para telefone mas telefone n apontar para ninguem ?
2º a Exception gerada foi pq telefone tava apontando para uma classe Abstrata ?
Obrigado pessoal
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2012 07:14:10
|
drsmachado
GUJ Expert
Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline
|
E pessoa está mapeada como? @Entity ou @MappedSuperclass?
|
Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".
Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2012 07:18:42
|
drsmachado
GUJ Expert
Membro desde: 25/09/2010 12:54:06
Mensagens: 3986
Localização: Curitiba / São José dos Pinhais - PR
Offline
|
Outra coisa, constraint não tem nada a ver com o mapeamento que você está utilizando.
Constraint é uma regra explicitada à determinado banco de dados/schema, tabela ou coluna, para que a integridade dos dados seja mantida.
Constraints podem ser criadas pelo DBA (ou pela pessoa que irá manipular o banco, mesmo que seja a tia do café) ou pelo banco de dados, como quando determinamos que uma coluna é primary key, o SGBD entende que esta não pode ter valores duplicados, mas, não somos nós que limitamos, o próprio ajusta uma constraint para evitar isso.
São também utilizadas em relacionamentos, pois, só assim há a integridade das tabelas (lembremos que integridade é uma propriedade dos bancos de dados, mas não uma responsabilidade, isto é dever de quem o manipula).
|
Rumo aos 4000
"Os homens de verdade assumem suas responsabilidades e culpas. Esquivar-se e dar desculpas é atitude dos tolos, que preferem não se comprometer".
Lugar de perguntar é no fórum!
Não respondo via MP
Não respondo por Email
Não respondo por IM |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2012 08:51:51
|
cristianovieira
Debugger
Membro desde: 10/03/2011 15:57:35
Mensagens: 52
Offline
|
Olá drsmachado obrigado pela explicação e pela resposta. Bom eu abri o tópico sobre constraint por que cheguei a conclusão (talvez erroneamente ou não) que:
1º O banco cria uma fk de cada relacionamento, no caso de telefone eu tenho os relacionamento de tel para usuario, tel para tipo de telefone e tel para pessoa, o unico relacionamento que não foi feito a fk foi a de pessoa que é a unica classe nesses relacionamentos que é abstrata, logo liguei uma coisa na outra ou seja, não fez a fk por que é abstrata.
2º Estou usando o SchemaExport para montar o meu banco, ou seja as configurações do banco e integridade é o reflexo das configurações das classes.
Sobre o mapeamento de Pessoa para Telefone como solicitado segue abaixo:
@OneToMany(mappedBy="pessoa")
@Cascade(CascadeType.ALL)
private List<TelPessoa> telpessoa;
O que me diz sobre sanar este problema com o mapeamento unidirecional ? ou seja.. Pessoa tem TEL mas TEL não tem Pessoa. O que acha ?
|
|
|
 |
|
|
|
|