@ManyToMany Hibernate/Jpa

1 resposta
A

Bom dia pessoal!

Tenhou uma dúvida eu tenho 3 tabelas “usuario”, “grupousuario” e “usuariogrupousuario”, onde “usuariogrupousuario” tem apenas um id(pk), idusuario(fk) e idgrupousuario(fk), eu fiz o mapeamento das duas classes: usuario e grupousuario, mais o problema é que não gera a PK na tabela usuariogrupousuario.

Alguém poderia me ajudar?

Abaixo os mapeamentos:

UsuarioVO.java

@Entity
@Table(name = "usuario")
@NamedQueries({
    @NamedQuery(name = "UsuarioVO.findAll", query = "SELECT u FROM UsuarioVO u"),
    @NamedQuery(name = "UsuarioVO.findById", query = "SELECT u FROM UsuarioVO u WHERE u.id = :id")
})
public class UsuarioVO extends VO {

    private static final long serialVersionUID = 1232131232L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id", columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    
    @Size(max = 100)
    @Column(name = "login")
    
    private String login;
    @Size(max = 100)
   

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = GrupoUsuarioVO.class)
    @JoinTable(name = "usuariogrupousuario",
    joinColumns = {
        @JoinColumn(name = "idusuario", columnDefinition = "integer")
    },
    inverseJoinColumns = {
        @JoinColumn(name = "idgrupousuario", columnDefinition = "integer")
    })
    private List<GrupoUsuarioVO> grupoUsuarios = new ArrayList<GrupoUsuarioVO>();

    public UsuarioVO() {
    }

    public UsuarioVO(Integer id) {
        this.id = id;
    }

    @Override
    public Integer getId() {
        return id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }


    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }


    public List<GrupoUsuarioVO> getGrupoUsuarios() {
        return grupoUsuarios;
    }

    public void setGrupoUsuarios(List<GrupoUsuarioVO> grupoUsuarios) {
        this.grupoUsuarios = grupoUsuarios;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof UsuarioVO)) {
            return false;
        }
        UsuarioVO other = (UsuarioVO) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "UsuarioVO[ id=" + id + " ]";
    }
}

GrupoUsuarioVO.java

@Entity
@Table(name = "grupousuario")
@NamedQueries({
    @NamedQuery(name = "GrupoUsuarioVO.findAll", query = "SELECT g FROM GrupoUsuarioVO g"),
    @NamedQuery(name = "GrupoUsuarioVO.findById", query = "SELECT g FROM GrupoUsuarioVO g WHERE g.id = :id")
})
public class GrupoUsuarioVO extends VO {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id", columnDefinition = "serial")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Size(max = 100)
    @Column(name = "descricao")
    private String descricao;

    @ManyToMany(fetch = FetchType.LAZY, targetEntity = UsuarioVO.class)
    @JoinTable(name = "usuariogrupousuario",
    joinColumns = {
        @JoinColumn(name = "idgrupousuario", columnDefinition = "integer")
    },
    inverseJoinColumns = {
        @JoinColumn(name = "idusuario", columnDefinition = "integer")
    })
    private List<UsuarioVO> usuarios;


    public GrupoUsuarioVO() {
    }

    public GrupoUsuarioVO(Integer id) {
        this.id = id;
    }

    @Override
    public Integer getId() {
        return id;
    }

    @Override
    public void setId(Integer id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public List<UsuarioVO> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<UsuarioVO> usuarios) {
        this.usuarios = usuarios;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (!(object instanceof GrupoUsuarioVO)) {
            return false;
        }
        GrupoUsuarioVO other = (GrupoUsuarioVO) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "logic.intranet.vo.GrupoUsuarioVO[ id=" + id + " ]";
    }
}

1 Resposta

Hebert_Coelho

Você está tendo algum erro por isso? Pois essa tabela realmente não tem que ter PK própria. Apenas a chave de um lado e do outro para relacionar.

Criado 18 de novembro de 2011
Ultima resposta 18 de nov. de 2011
Respostas 1
Participantes 2