atom feed3 messages in net.java.dev.cejug.discussao[CEJUG] Re: Herança com JPA
FromSent OnAttachments
Alberto IvoApr 13, 2012 10:04 am 
Marcel MaurícioApr 13, 2012 12:14 pm 
Alberto IvoApr 15, 2012 6:09 am 
Subject:[CEJUG] Re: Herança com JPA
From:Marcel Maurício (marc@gmail.com)
Date:Apr 13, 2012 12:14:21 pm
List:net.java.dev.cejug.discussao

Na verdade, você não precisa dos atributos tipoUsuario e tipoCliente nas entidades . Ao mapear @DiscriminatorColumn você aponta pra coluna do banco e as classes derivadas irão ter o @DiscriminatorValue com o valor que terá nessa coluna para este tipo de objeto. Se deseja saber o tipo, basta verificar o tipo de objeto.

Não entendi a sua pergunta sobre consultar ClienteFisico e userAccount vir nulo. Não vi nenhuma associação / relacionamento, apenas a herança.

Obs.: Procure averiguar se é possível essa sobrescrita de tipos de herança, pois em UserAccount você está definindo JOINED e na subclasse abstrata Cliente SINGLE_TABLE.

On Fri, Apr 13, 2012 at 2:05 PM, Alberto Ivo <albe@gmail.com> wrote:

Olá pessoal.. to tentando fazer uma herança entre 5 classes e estou tendo alguns probleminhas.. Eis meu mapeamento:

UserAccount - Advogado - Cliente -- Cliente Fisico -- Cliente Juridico

@Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "tipoUsuario", discriminatorType = DiscriminatorType.STRING, length = 1) @DiscriminatorValue(value = "U") public abstract class UserAccount implements Serializable {

@Id private Integer id;

@Column(length = 1, nullable = false) private String tipoUsuario; }

------------------------------------------------------------------------------------------------

@Entity @DiscriminatorValue("A") public class Advogado extends UserAccount { . . . }

------------------------------------------------------------------------------------------------

@Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "tipoCliente", discriminatorType = DiscriminatorType.CHAR) @DiscriminatorValue(value = "C") public abstract class Cliente extends UserAccount {

@Column(length = 1) private Character tipoCliente; }

------------------------------------------------------------------------------------------------

@Entity @DiscriminatorValue("F") public class ClienteFisico extends Cliente { . . . }

------------------------------------------------------------------------------------------------ @Entity @DiscriminatorValue("J") public class ClienteJuridico extends Cliente { . . . }

------------------------------------------------------------------------------------------------

Ao inserir um Cliente Fisico, por exemplo, eu obrigatoriamentepreciso setar o campo *tipoCliente. *E o campo tipoUsuario (UserAccount) fica como *F*. Só que, o UserAccount deveria ficar C - cliente - o tipoCliente é que deveria ficar F. Outra coisa, ao recuperar o Cliente Fisico, o userAccount vem nulo, eu preciso recuperar, eu preciso fazer um JPQL para que o UserAccount venha? Estou usando EclipseLink.

valeu.