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

Re: [javasf] Estratégia para mapeamento ManyToMany

Subject: Re: [javasf] Estratégia para mapeamento ManyToMany
From: thiago moraes
Date: Sun, 7 Mar 2010 13:19:50 -0300
Você nao precisa criar a classe que representa a tabela de ligação neste caso.

http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#ManyToMany

2010/3/6 Walter Mourão <walter.mourao@xxxxxxxxx>
Porque você precisa de manipular a tabela equipe_operador diretamente ?

Walter Mourão
http://waltermourao.com.br
http://arcadian.com.br
http://oriens.com.br



2010/3/5 Samer <samer.jamal@xxxxxxxxx>

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

--
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



--
Thiago Alves de Moraes
thiagoampj@xxxxxxxxx

--
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>