javasf@googlegroups.com
[Top] [All Lists]

[javasf] Estratégia para mapeamento ManyToMany

Subject: [javasf] Estratégia para mapeamento ManyToMany
From: Samer
Date: Fri, 5 Mar 2010 15:16:01 -0800 PST
Pessoal, gostaria de saber como fazem para mapear relacionamentos
ManyToMany.

To achando meio bizarro a maneira que fiz, vou explicar:

Tenho as classes Equipe¹ e Operador², na Equipe declaro uma lista de
Operadores e mapeio o get com a anotação @ManyToMany, na minha
ViewEquipe eu utilizo uma lista populada de operadores nas checkboxes
e o value como equipe.operadores.

Tá gravando tudo certinho, gera a tabela equipe_operador com as PK's
de cada entidade e é aí que tá o meu incomodo.

Como preciso manipular a tabela intermediária equipe_operador, acabo
criando uma classe EquipeOperador, ou seja, pra criar a classe
EquipeOperador acabo tendo que mapear uma PK da própria entidade
EquipeOperador³, e to achando isso uma merda, pois a tabela gerada
automaticamente com a anotação @ManyToMany não tem PK.

Quem tiver paciencia, poderia sanar minhas dúvidas:

- Daria pra criar uma PK equipeOperadorId na anotação @ManyToMany?
- Alguém poderia me explicar como eu poderia fazer isso de maneira
bidirecional (OneToMany nas classes Equipe e Operador e ManyToOne na
classe EquipeOperador)? Com essa abordagem, não usaria ManyToMany,
como ficaria a minha lista de operadores e o value?
- Existe outra maneira pra contornar essa situação?

Segue meu código:

public class Equipe {

        private Integer equipeId;
        private String name;
        private List<Operador> operadores;

        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "equipe_id")
        public Integer getEquipeId() {
                return equipeId;
        }

        @ManyToMany
        @JoinTable(name = "equipe_operador",
        joinColumns = @JoinColumn(name = "equipe_id"),
        inverseJoinColumns = @JoinColumn(name = "operador_id"))
        public List<Operador> getOperadores() {
                return operadores;
        }

        // construtor, get's, set's, hash e equals
}

public class Operador {

        private Integer operadorId;
        private String name;

        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "operador_id")
        public Integer getOperadorId() {
                return operadorId;
        }

        // construtor, get's, set's, hash e equals
}

public class EquipeOperador {

        private Integer equipeOperadorId;
        private Equipe equipe;
        private Operador operador;

        // Aqui que tá a merda!! <=================
        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "equipe_operador_id")
        public Integer getEquipeOperadorId() {
                return this.equipeOperadorId;
        }

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "equipe_id")
        @NotNull
        public Equipe getEquipe() {
                return this.equipe;
        }

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "operador_id", nullable = false)
        @NotNull
        public Operador getOperador() {
                return this.operador;
        }

        // construtor, get's, set's, hash e equals
}

<s:decorate id="operador">
        <ui:define name="label">Operadores</ui:define>
        <t:selectManyCheckbox value="#{equipe.operadores}">
                <s:selectItems var="_operador" value="#{operadores}"
                        label="#{_operador.nome}" />
        </t:selectManyCheckbox>
</s:decorate>
[/code]

Sei que são muitos dúvidas, mas to com medo de estar fazendo muita
besteira.

Abraços!!!

-- 
http://groups.google.com/group/javasf

You received this message because you are subscribed to the Google
Groups "javasf: JavaServer Faces Group" group.
To post to this group, send email to javasf@xxxxxxxxxxxxxxxx

<Prev in Thread] Current Thread [Next in Thread>