Pessoal,
Estou com um problema aqui, vou tentar ser claro, espero contar com a ajuda de voces.
Tenho uma classe PessoaFisica e outra Usuario, a minha classe Usuario herda de PessoaFisica. No BD utilizo a estrutura de subtableas, com isso, tenho uma tabela pessoa_fisica e outra tabela usuario. Consigo persistir os dados de um usuario no BD sem problemas (uso hibernate), cada uma das tabelas ficam com seu id e na tabela usuario tenho uma coluna que faz referencia a tabela pessoa_fisica. Até aí tudo bem.
O problema começa quando vou salvar um Pedido, a minha classe Pedido tem relacionamento com outras classes e com a classe Usuario (que herda de PessoaFisica), ao salvar um pedido no BD o id que é salvo é o id da minha tabela pessoa_fisica e não o id da tabela usuario, acho que isso nem é tão errado e/ou problematico, o problema é que ao tentar acessar via EL os atributos do meu objeto Usuario ou PessoaFisica, não acontece nada, simplesmente não mostra na tela nada.
Como a classe pedido tem relacionamento com usuario(nao sei se coloco esse relacionamento com PessoFisica), eu chamo, atraves de EL: ${pedido.usuario.nome}, ja tentei colocar ${pedido.pessoaFisica.nome} e não aparece nada, alguem pode me ajudar?
Espero ter conseguido fazer alguem enteder:
package camisas.modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name = "pessoa_fisica", schema = "camisas")
@Inheritance(strategy=InheritanceType.JOINED)
public class PessoaFisica implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "nome")
private String nome;
@Column(name = "cpf")
private String cpf;
@Column(name = "sexo")
private String sexo;
@Temporal(TemporalType.DATE)
@Column(name="data_nascimento")
private Date dataNascimento;
@Column(name = "tel_residencial")
private String telResidencial;
@Column(name = "tel_comercial")
private String telComercial;
@Column(name = "celular")
private String celular;
@Column(name = "email")
private String email;
@OneToOne
@JoinColumn(name = "endereco", referencedColumnName = "id", insertable = true, updatable = true)
@Cascade(CascadeType.ALL)
private Endereco endereco;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public Date getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Date dataNascimento) {
this.dataNascimento = dataNascimento;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getTelComercial() {
return telComercial;
}
public void setTelComercial(String telComercial) {
this.telComercial = telComercial;
}
public String getTelResidencial() {
return telResidencial;
}
public void setTelResidencial(String telResidencial) {
this.telResidencial = telResidencial;
}
public Endereco getEndereco() {
return endereco;
}
public void setEndereco(Endereco endereco) {
this.endereco = endereco;
}
}
package camisas.modelo;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name = "usuario", schema = "camisas")
@PrimaryKeyJoinColumn(name = "pessoa_fisica")
public class Usuario extends PessoaFisica implements Serializable {
@Column(name = "login")
private String login;
@Column(name = "senha")
private String senha;
/*@Column(name = "tipo")
private String tipo;*/
@Column(name = "ativo")
private String ativo;
@OneToOne(mappedBy = "usuario")
private Pedido pedido;
public Usuario() {
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getAtivo() {
return ativo;
}
public void setAtivo(String ativo) {
this.ativo = ativo;
}
public Pedido getPedido() {
return pedido;
}
public void setPedido(Pedido pedido) {
this.pedido = pedido;
}
}
package camisas.modelo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.persistence.TemporalType;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name = "pedido", schema = "camisas")
public class Pedido implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@OneToOne
@JoinColumn(name = "camisa", referencedColumnName = "id", insertable = true, updatable = true)
@Cascade(CascadeType.ALL)
private Camisa camisa;
@OneToOne
@JoinColumn(name = "usuario", referencedColumnName = "id", insertable = true, updatable = true)
@Cascade(CascadeType.ALL)
private Usuario usuario;
@Temporal(TemporalType.DATE)
@Column(name = "data_pedido")
private Date data;
@Column(name = "valor_total")
private int valorTotal;
public Pedido() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Camisa getCamisa() {
return camisa;
}
public void setCamisa(Camisa camisa) {
this.camisa = camisa;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public int getValorTotal() {
return valorTotal;
}
public void setValorTotal(int valorTotal) {
this.valorTotal = valorTotal;
}
}