Pessoal,
Estou com um problema com annotations para compartilhar o mesmo id
entre duas Entidades.
-
Existem 3 classes, Pessoa, PessoaFisica e Usuario. A classe Usuario faz uma composicao da classe PessoaFisica, e eu preciso utilizar o mesmo ID da PessoaFisica. Eu uso como composição, porque a PessoaFisica pode exercer outros papéis, como por exemplo, Empregado.
-
O grande problema é o fato de que quando eu faço uma pesquisa (HQL) na Classe Usuário ele carrega a PessoaFisica também. Por exemplo:
from Usuario where nomeLogin = 'jukinha'
resultado HQL:
Hibernate: select usuario0_.id as id18_, usuario0_.tdta_inclusao as tdta2_18_, usuario0_.id_usuario_inc as id9_18_, usuario0_.nsta_situacao as nsta3_18_, usuario0_.id_ibv as id10_18_, usuario0_.id_email_pessoa as id11_18_, usuario0_.ddta_encerramento as ddta4_18_, usuario0_.snme_login as snme5_18_, usuario0_.bspr_usuario as bspr6_18_, usuario0_.bbol_auditado as bbol7_18_, usuario0_.sdsc_senha as sdsc8_18_ from seg_usuario usuario0_ where usuario0_.snme_login=?
Hibernate: select pessoafisi0_.id as id26_0_, pessoafisi0_.snme_pessoa as snme3_26_0_, pessoafisi0_.sdsc_pronuncia as sdsc4_26_0_, pessoafisi0_.sdsc_pseudonimo as sdsc5_26_0_, pessoafisi0_.sdsc_site as sdsc6_26_0_, pessoafisi0_.ssta_situacao as ssta7_26_0_, pessoafisi0_.versao as versao26_0_, pessoafisi0_.ntpo_sexo as ntpo9_26_0_, pessoafisi0_.ntpo_estado_civil as ntpo10_26_0_, pessoafisi0_.ddta_nascimento as ddta11_26_0_, pessoafisi0_.id_nacionalidade as id27_26_0_, pessoafisi0_.id_natural as id25_26_0_, pessoafisi0_.ddta_falecimento as ddta12_26_0_, pessoafisi0_.ngra_escolaridade as ngra13_26_0_, pessoafisi0_.snmr_rg as snmr14_26_0_, pessoafisi0_.snmr_digito_rg as snmr15_26_0_, pessoafisi0_.id_estado_rg as id16_26_0_, pessoafisi0_.ddta_expedicao as ddta17_26_0_, pessoafisi0_.snmr_cpf as snmr18_26_0_, pessoafisi0_.id_cnh as id29_26_0_, pessoafisi0_.id_titulo_eleitor as id28_26_0_, pessoafisi0_.id_certificado_reservista as id30_26_0_, pessoafisi0_.id_ctps as id26_26_0_ from glb_pessoa pessoafisi0_ where pessoafisi0_.id=? and pessoafisi0_.stpo_pessoa='F'
Alguém saberia me dizer porque isso ocorre?
@Entity (name="Pessoa")
@SequenceGenerator(
name="pessoaSeq",
sequenceName="sq_pss_id"
)
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="stpo_pessoa", discriminatorType=DiscriminatorType.STRING, length=1)
@Table (name="tbl_pessoa")
public abstract class Pessoa implements Serializable {
....
@Id @GeneratedValue(strategy=GenerationType.AUTO, generator="pessoaSeq" )
public Integer getId() {
return id;
}
}
@Entity (name="PessoaFisica")
@DiscriminatorValue("F")
public class PessoaFisica extends Pessoa{
private Sexo sexo;
....
}
@Entity (name="Usuario")
@Table (name="seg_usuario",
uniqueConstraints = {@UniqueConstraint(columnNames={"snme_login"})}
)
public class Usuario implements Serializable{
private String nomeLogin;
private PessoaFisica pessoaFisica;
...
@Id @GeneratedValue(generator = "myForeignGenerator")
@org.hibernate.annotations.GenericGenerator(
name = "myForeignGenerator",
strategy = "foreign",
parameters = @Parameter(name = "property", value = "pessoaFisica")
)
public Integer getId() {
return id;
}
@OneToOne
@PrimaryKeyJoinColumn
public PessoaFisica getPessoaFisica() {
return pessoaFisica;
}
}