Como mapear um ManyToMany usando Annotation no Hibernate

4 respostas
marciobarroso

E ae pessoal 8) ,

Estou tentando criar um mapeamento ManyToMany no Hibernate usando annotation, mas não estou tendo sucesso.

Eu tenho 3 tabelas no meu bd :
<Empresa>
<Pagamento>
<EmpresaPagamento>

A tabela EmpresaPagamento possui 2 campos que são o id da empresa e o id do pagamento.

Exemplo :

<EmpresaPagamento>
empresa_id | pagamento_id
1 | 2
1 | 3

onde esta tabela possui 2 foreignKey sendo 1 delas a primaryKey da tabela Empresa e a outra a primaryKey da tabela Pagamento.

Gostaria de saber como fazer o mapeamento correto destas entidades.

Empresa.class

public class Empresa {
      private Long id;
      private String nome;
      private Set&lt;Pagamento&gt; pagamento;

/* Getters e Setters omitidos */

}

Pagamento.class

public class Pagamento {
      private Long id;
      private String nome;
      private Integer dias;

/* Getters e Setters omitidos */

}

Se por acaso esta não for a melhor maneira de criar este mapeamento, por favor me dê um auxílio, pois não sou mto experiente em banco de dados.

[ :smiley: ]

4 Respostas

urubatan

tenta isto:

@Entity
public class Empresa {
       @Id
       @GeneratedValue  
       private Long id;
       private String nome;
       @ManyToMany
       private Set&lt;Pagamento&gt; pagamento;
 
 /* Getters e Setters omitidos */
 
 }

@Entity
public class Pagamento {
       @Id
       @GeneratedValue  
       private Long id;
       private String nome;
       private Integer dias;
 
 /* Getters e Setters omitidos */
 
 }
marciobarroso

Não foi relatado em nenhum momento a tabela de relacionamento … tenho um guide oficial do hibernate annotation que fala como fazer, mas na hora de implementar, os imports das tags nunca são encontrados … e os jars necessários estão no classpath da app … por isso perguntei se existe outra forma de mapear …

valew de qq forma

ricardo.valeriano

Bom, se alguém mais chegar aqui através de busca no google ou afins, tá aí. Colei o exemplo da documentação do hibernate.
A fonte: http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/

@Entity
public class Employer implements Serializable {
    @ManyToMany(
        targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="EMPLOYER_EMPLOYEE",
        joinColumns=@JoinColumn(name="EMPER_ID"),
        inverseJoinColumns=@JoinColumn(name="EMPEE_ID")
    )
    public Collection getEmployees() {
        return employees;
    }
    ...
}
@Entity
public class Employee implements Serializable {
    @ManyToMany(
        cascade = {CascadeType.PERSIST, CascadeType.MERGE},
        mappedBy = "employees",
        targetEntity = Employer.class
    )
    public Collection getEmployers() {
        return employers;
    }
}
vitenho

ola Ricardo Valeriano

como eu faria uma query por exemplo para pegar os Employees de um determinado Employer?

mas sem utilizar em.createNativeQuery(“sql”, Classe);
somente com em.createNamed ou em.createQuery…

agradeço a ajuda

abraço

Criado 6 de abril de 2006
Ultima resposta 23 de set. de 2008
Respostas 4
Participantes 4