Many-to-many annotation

4 respostas
K

Galera,

Nao estou conseguindo mapear um relacionamento n:n usando hibernate + annotation.

Quando percorro os grupos (list) e dos grupos tento pegar os servidores da um erro no sql, ou seja, o hibernate ta montando a query errada, o inner join ta saindo errado e com isso os campos também.

Alguém pode me ajudar??

Abraços

Segue em anexo minha estrutura

tenho a seguinte estrutura no BD:

tablea: grupo_servidor
camos: id_servidor, id_grupo

tablea: servidores
camos: id, nome, ip

tablea: grupo
camos: id, nome


codigo:

@Entity

@Table(name=servidores)

public class Servidor implements Serializable {
private int id;

private String nome;

private String ip;

private List grupos;

public boolean equals(Object obj) …
public int hashCode() …
public String toString() …

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}
@ManyToMany(fetch=FetchType.LAZY,

mappedBy=servidores,

cascade={CascadeType.PERSIST, CascadeType.MERGE},

targetEntity=dominio.Grupo.class)

public List getGrupos() {

return grupos;

}

public void setGrupos(List grupos) {

this.grupos = grupos;

}

@Entity
public class Grupo {

private int id;

private String nome;

private List servidores;

public boolean equals(Object obj)…
public int hashCode() …
public String toString()…

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)

public int getId() {

return id;

}
public void setId(int id) {

this.id = id;

}
@ManyToMany(fetch=FetchType.LAZY,

targetEntity=dominio.Servidor.class,

cascade={CascadeType.PERSIST, CascadeType.MERGE})

@JoinTable(name=grupo_servidor,

joinColumns={@JoinColumn(name=id_servidor)},

inverseJoinColumns={@JoinColumn(name=id_grupo)})
public List getServidores() {

return servidores;

}
public void setServidores(List servidores) {

this.servidores = servidores;

}

}

4 Respostas

fsquadro

kurokibr,

Você já deu uma olhada na apostila do Hibernate?

http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf

L

Opa!

Então, é gerada alguma Exception? Posta o erro, que fica melhor pra
gente tentar ajudar.

K

Galera,
Consegui resolver.
Só fiz inverter o local onde fazia o mapeamento, ou seja, ficou assim:

Servidores:

@ManyToMany(fetch=FetchType.LAZY,

targetEntity=dominio.Grupo.class,

cascade={CascadeType.PERSIST, CascadeType.MERGE})

@JoinTable(name=grupo_servidor,

joinColumns={@JoinColumn(name=id_servidor)},

inverseJoinColumns={@JoinColumn(name=id_grupo)})

public List getGrupos() {

return grupos;

}

Grupo:

@ManyToMany(fetch=FetchType.LAZY,

mappedBy=grupos,

cascade={CascadeType.PERSIST, CascadeType.MERGE},

targetEntity=dominio.Servidor.class)

public List getServidores() {

return servidores;

}

Abraços,

Antonio Kuroki

K

O relacionamento esta funcionando porem, tem um problema:
Como fazer os inserts e deletes na tabela grupo_servidor??

Não tenho a menor idéia, alguém se habilita??

Abraços,

Antonio Kuroki

Criado 20 de junho de 2007
Ultima resposta 20 de jun. de 2007
Respostas 4
Participantes 3