Duvida sobre constraints  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
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




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
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
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 ?
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team