Meu problema e o seguinte tenho uma classe pessoa que eu generalizo para a classe instituicao, aluno, professor e outras, porem no momento estou com problemas na classe instituicao pois estou implementando um cadastro em jsf + ejb + jpa2 com eclipslink.
Segue abaixo as minhas classes enxugadas
[code]
@Entity
@Table(name = “pessoa”)
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = “pes_tipo”, discriminatorType = DiscriminatorType.STRING, length = 1)
@DiscriminatorValue(“0”)
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1;
@Id
@Column(name = "pes_codigo")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer idPessoa;
@Column(name = "pes_tipo")
private String tipo;
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@PrimaryKeyJoinColumn(name="pes_codigo")
Endereco endereco;
//get sets
}[/code]
[code]
@Entity
@Table(name = “endereco”)
public class Endereco implements Serializable {
private static final long serialVersionUID = 1;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "end_codigo")
private Integer idEndereco;
@Column(name = "end_numero")
private int numero;
@Column(name = "end_complemento")
private String complemento;
@OneToOne(mappedBy="endereco", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="pes_codigo", insertable=true, updatable=true, nullable=false)
private Pessoa pessoa;
//get sets
}[/code]
[code]@Entity
@Table(name=“instituicao”)
@PrimaryKeyJoinColumn(name=“pes_codigo”)
@DiscriminatorValue(“I”)
public class Instituicao extends Pessoa{
@Column(name="ins_cnpj")
private String cnpj;
@Column(name="ins_razao_social")
private String razaoSocial;
@Column(name="ins_inscricao_estadual")
private String inscricaoEstadual;
}[/code]
Eu retirei alguns atributos das classes para ficar mais facil de ler o codigo.
Como voces podem ver existe uma classe insitituicao que herda de pessoa e a classe pessoa tem uma associacoa OneToOne para a classe Endereco.
Logo abaixo eu exportei as tabelas do banco de dados MySQL para que voces cosigam ter uma breve nocao de como estao as tabelas
[code]
CREATE TABLE endereco
(
end_codigo
int(11) NOT NULL AUTO_INCREMENT,
end_numero
int(11) NOT NULL,
end_complemento
varchar(255) NOT NULL,
log_codigo
int(11) NOT NULL,
pes_codigo
int(11) DEFAULT NULL,
PRIMARY KEY (end_codigo
),
KEY FK_ENDERECO_LOGRADOURO
(log_codigo
),
KEY FK672D67C9FF00390
(pes_codigo
),
KEY FK672D67C9AEE113F7
(log_codigo
),
CONSTRAINT FK_ENDERECO_LOGRADOURO
FOREIGN KEY (log_codigo
) REFERENCES logradouro
(log_codigo
) ON UPDATE CASCADE,
CONSTRAINT FK_ENDERECO_PESSOA
FOREIGN KEY (pes_codigo
) REFERENCES pessoa
(pes_codigo
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE pessoa
(
pes_codigo
int(11) NOT NULL AUTO_INCREMENT,
pes_nome
varchar(50) NOT NULL,
pes_telefone
varchar(15) DEFAULT NULL,
pes_email
varchar(100) DEFAULT NULL,
pes_login
varchar(50) NOT NULL,
pes_senha
varchar(20) NOT NULL,
pes_bloqueado
varchar(1) NOT NULL DEFAULT ‘N’,
PRIMARY KEY (pes_codigo
)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
CREATE TABLE instituicao
(
pes_codigo
int(11) NOT NULL,
ins_razao_social
varchar(100) NOT NULL,
ins_cnpj
varchar(14) NOT NULL,
ins_inscricao_estadual
varchar(20) NOT NULL,
PRIMARY KEY (pes_codigo
),
KEY PK_EMPRESA
(pes_codigo
),
CONSTRAINT FK_INSTITUICAO_PESSOA
FOREIGN KEY (pes_codigo
) REFERENCES pessoa
(pes_codigo
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;[/code]
O meu grande problema esta na hora de salvar a Instituicao pois o JPA insere tudo na tabela instituicao, pessoa, e na tabela endereco fica faltando fazer o relacionamento com pessoa ou seja o campo pes_codigo fica vazio.
Ja fiz de tudo quanto e anotacao possivel nessas entidades e nao consegui fazer salvar, alguem aqui poderia me dar uma luz no fim do tunel…???
A ultima tentativa foi inserir primeiro instituicao sem endereco e depois alterar o objeto com a instituicao ja com o idPessoa criado e altera-la e mesmo assim nao houve sucesso algum continuei sem ver o pes_codigo dentro da tabela endereco.
Alguem pode me ajudar urgente com esse problema…