Chave primária composta X HQL

2 respostas
horochovec

Ola pessoal, estou com um problema em manutenção de dados com chave composta atraves de HQL.

Segue a minha classe modelo da tabela.

@Entity
@Table(name="TABELAEMPSEQ")
public class Tabelaempseq implements Serializable {
    
    @EmbeddedId 
    private TabelaempseqPK tabelaempseqPK;

    ....

Minha classe de chaves primarias

@Embeddable
public class TabelaempseqPK implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Column(name = "cd_empresa", nullable = false)
    private Integer cd_empresa;
    
    @Column(name = "cd_filial", nullable = false)
    private Integer cd_filial;
    
    @Column(name = "nm_tabela", nullable = false)
    private String nm_tabela;

    ....

Tenho outras classes assim e atraves de gravação usando objeto vai embora… mas quando eu preciso do HQL para fazer alguma coisa… segue exemplo:

public Tabelaempseq getSequence() {

        Session sessao = HibernateUtil.getSession();
        sessao.beginTransaction();  
         
        org.hibernate.Query query = sessao.createQuery("from " +
                                                       "Tabelaempseq t " +
                                                       "where " +
                                                       "t.cd_empresa = :cd_empresa and " +
                                                       "t.cd_filial = :cd_filial and " +
                                                       "t.nm_tabela = :nm_tabela");
        query.setString("nm_tabela", this.dsTabela);
        query.setInteger("cd_empresa", this.cdEmpresa);
        query.setInteger("cd_filial", this.cdFilial);

        .....

Ele me retorna um erro:

Exception in thread "main" org.hibernate.QueryException: could not resolve property: cd_empresa of: persistencia.modelo.Tabelaempseq [from persistencia.modelo.Tabelaempseq t where t.cd_empresa = :cd_empresa and t.cd_filial = :cd_filial and t.nm_tabela = :nm_tabela]

Ou seja, eu não sei como usar o HQL para trabalhar com chaves estrangeiras compostas. Detalhe… sou obrigado e ou contra essa situação de banco, mas no momento isso não vem ao caso.

Se alguem ja sofreu ou sabe tratar e puder me auxiliar.

Abraços

2 Respostas

_fs

Tente

from Tabelaempseq t where t.tabelaempseqPK.cd_empresa = :cd_empresa
horochovec

Ola Filipe,

depois de eu adicionar esse trecho abaixo e colocar seu complemento sugerido no HQL funcionou… Muito obrigado pela dica

@EmbeddedId 
    @AttributeOverrides({
        @AttributeOverride(name = "cd_empresa", column  = @Column(name = "cd_empresa",  unique = true)),
        @AttributeOverride(name = "cd_filial", column   = @Column(name = "cd_filial",   unique = true)),
        @AttributeOverride(name = "nm_tabela", column   = @Column(name = "nm_tabela",   unique = true))
    })
    private TabelaempseqPK tabelaempseqPK;
Criado 9 de abril de 2008
Ultima resposta 9 de abr. de 2008
Respostas 2
Participantes 2