Registros na tabela ternaria em uma Many to Many no Hibernate

6 respostas
W

Pessoal, boa noite!

Eu tenho as seguintes classes: Campeonato e Cluble, um clube pode estar em vário campeonatos e um campeonato em vários clubes, portanto tenho mapeado um relacionamento ManyToMany, até ai tudo bem, o problema é que eu adiciono por exemplo o campeonato com o IDCampeonato 1 e o IDClube 1 na tabela ternaria, sendo assim se eu tentasse adicionar os 2 novamente ele não deveria deixar. Como faço o mapeamento para funcionar desta maneira?

@javax.persistence.Entity  
 public class Campeonato implements java.io.Serializable{  
       
     private static final long serialVersionUID = 1L;  
     @javax.persistence.Id  
     @javax.persistence.GeneratedValue  
     private Long idCampeonato;  
     @NotNull  
     private int gruposCampeonato;  
     @NotNull  
     private int clubesCampeonato;  
     @NotEmpty  
     private String tipoCampeonato;  
   
     @CollectionOfElements  
     @JoinTable(      
             name="campeonato_clube",      
             joinColumns={@JoinColumn(name="idCampeonato")},      
             inverseJoinColumns={@JoinColumn(name="idClube")}      
     )    
     private List<Clube> clubes;
@javax.persistence.Entity
public class Clube implements java.io.Serializable{

	private static final long serialVersionUID = 1L;
	@javax.persistence.Id
	@javax.persistence.GeneratedValue
	private Long idClube;
	@NotEmpty
	private String nomeClube;
	@NotNull
	private int nivelClube;
	@NotEmpty
	private String paisClube;
	private String escudoClube;
	
	@ManyToMany (mappedBy = "clubes" ) 
	private List<Campeonato> campeonatos;
//     Gets and Sets

Grato,
Wallfox

6 Respostas

vitenho

o jeito rapido é vc fazer um if antes de adicionar em ambas as collections e retornar um erro se algum ja esta la

W

vitenho:
o jeito rapido é vc fazer um if antes de adicionar em ambas as collections e retornar um erro se algum ja esta la

Esse jeito não é tão rápido assim. Deve haver alguma maneira de mapear isso no annotation.

Att.
Wallfox

vitenho

se as duas collectinos forem Set nunca vai haver elementos repetidos

W

Como deveria fazer? Por favor, você pode me dar um exemplo?

Att.
Wallfox

vitenho

Esse jeito não é tão rápido assim. Deve haver alguma maneira de mapear isso no annotation.

se vc encontrar uma @ que nao deixe haver elementos repetidos numa collection avisa pra todo mundo por que vc é um genio

ué ? troca as collections de List pra Set

class User {
Set<Group> groups;
String nome;
}


class Group{
Set<User> users;
String groupName;
}

ja leu o javadoc da interface Set???

W

vitenho:

Esse jeito não é tão rápido assim. Deve haver alguma maneira de mapear isso no annotation.

se vc encontrar uma @ que nao deixe haver elementos repetidos numa collection avisa pra todo mundo por que vc é um genio

ué ? troca as collections de List pra Set

class User {
Set<Group> groups;
String nome;
}


class Group{
Set<User> users;
String groupName;
}

ja leu o javadoc da interface Set???

Rssss… gênio eu não sou msm, mas tb nem tão burrinho assim.

O jeito vai ser setar os no BD mesmo, ai invés de deixa o Hibenate fazer isso pra mim.

Valeu!

Criado 30 de julho de 2009
Ultima resposta 7 de ago. de 2009
Respostas 6
Participantes 2