[Logo] Neo Framework Forum
  [Search] Busca   [Recent Topics] Tópicos Recentes   [Members]  Lista de Usuários   [Groups] De volta para a página principal 
[Register] Registrar / 
[Login] Entrar 
[RESOLVIDO] - Mapeamento com chave múltipla...  XML
Índice dos Fóruns -> Dúvidas
Autor Mensagem
rodrigo.freitas
Equipe
[Avatar]
Membro desde: 17/04/2007 16:43:33
Mensagens: 37
Localização: Belo Horizonte - MG
Offline

Alguem sabe como fazer o mapeamento de chave múltipla??

Tentei olhar na documentação do hibernate nao consegui nada...

Code:
 
 @Entity
 public class Componentediretoria {
 	
 	@Id
 	protected ComponentediretoriaPk pk;
 	protected Associado associado;
 	
 	@SuppressWarnings("unused")
         @Column(name="cddiretoria", nullable=false, updatable=false, insertable=false)
 	private Integer diretoria;
 	
 	@SuppressWarnings("unused")
         @Column(name="cdcargodiretoria", nullable=false, updatable=false, insertable=false)
 	private Integer cargoDiretoria;
 	
 	
 	@ManyToOne(fetch=FetchType.LAZY)
 	@JoinColumn(name="cdassociado")
 	public Associado getAssociado() {
 		return associado;
 	}
 	
 	public void setAssociado(Associado associado) {
 		this.associado = associado;
 	}
 	
 	public Diretoria getDiretoria() {
 		return pk.getDiretoria();
 	}
 	
 	public CargoDiretoria getCargoDiretoria() {
 		return pk.getCargoDiretoria();
 	}
 	
 	public void setDiretoria(Diretoria diretoria) {
 		pk.setDiretoria(diretoria);
 	}
 	
 	public void setCargoDiretoria(CargoDiretoria cargoDiretoria){
 		pk.setCargoDiretoria(cargoDiretoria);
 	}
 	
 	
 	@Embeddable
 	private class ComponentediretoriaPk implements Serializable {
 		
 		protected Diretoria diretoria;
 		protected CargoDiretoria cargoDiretoria;
 		
 		@ManyToOne
 		public CargoDiretoria getCargoDiretoria() {
 			return cargoDiretoria;
 		}
 
 		@ManyToOne
 		public Diretoria getDiretoria() {
 			return diretoria;
 		}
 		
 		public void setDiretoria(Diretoria diretoria) {
 			this.diretoria = diretoria;
 		}
 		
 		public void setCargoDiretoria(CargoDiretoria cargoDiretoria) {
 			this.cargoDiretoria = cargoDiretoria;
 		}
 	}
 	
 }
 
 
 
 



Criei uma classe interna para representar a chave...
Mas quando vou ligar o JBOSS está dando o seguinte erro:

Code:
 
 15:54:26,968 ERROR [ContextLoader] Context initialization failed
 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in null: Initialization of bean failed; nested exception is org.hibernate.MappingException: Could not determine type for: br.org.assima.siteassima.bean.Associado, for columns: [org.hibernate.mapping.Column(associado)]
 org.hibernate.MappingException: Could not determine type for: br.org.assima.siteassima.bean.Associado, for columns: [org.hibernate.mapping.Column(associado)]
 	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
 	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
 
 

Rodrigo Duarte de Freitas
Desenvolvedor de Sistemas
LinkCom - Soluçoes em T.I
Belo Horizonte - MG
rodrigo.freitas@linkcom.com.br - www.linkcom.com.br
Telefone/Fax: (31) 3239-4000
[Email] [MSN]
Igor.Costa
MultiAction
[Avatar]
Membro desde: 22/06/2007 15:13:22
Mensagens: 79
Localização: Vitória da Conquista - BA
Offline

posta o bean Associado...

A próposito, seria bom você implementar os relacionamentos sem chave multipla, isso não é recomendado nem pelo Hibernate... dá uma olhada em http://www.neoframework.org/forum/posts/list/125.page

vlw

Igor Costa

MasterSoft Sistemas Ltda.


[Email] [WWW] [Yahoo!] [MSN]
rodrigo.freitas
Equipe
[Avatar]
Membro desde: 17/04/2007 16:43:33
Mensagens: 37
Localização: Belo Horizonte - MG
Offline

É eu sei disso, o problema que o banco é usado por outra aplicação e não tem jeito de mudar.

Mas o bean associado é o seguinte:

Code:
 @Entity
 @SequenceGenerator(name = "gen_associado", sequenceName = "gen_associado")
 public class Associado {
 	
 	protected Integer cdassociado;
 	protected String nome;
 	
 
 	@Id
 	@GeneratedValue(strategy=GenerationType.AUTO, generator="gen_associado")
 	public Integer getCdassociado() {
 		return cdassociado;
 	}
 	
 	public String getNome() {
 		return nome;
 	}
 	
 	public void setCdassociado(Integer cdassociado) {
 		this.cdassociado = cdassociado;
 	}
 	
 	public void setNome(String nome) {
 		this.nome = nome;
 	}
 	
 }
 


E a annotation @Entity é do pacote "javax.persistence.Entity".

Rodrigo Duarte de Freitas
Desenvolvedor de Sistemas
LinkCom - Soluçoes em T.I
Belo Horizonte - MG
rodrigo.freitas@linkcom.com.br - www.linkcom.com.br
Telefone/Fax: (31) 3239-4000
[Email] [MSN]
rogel.garcia
Xiita

Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline



@SuppressWarnings("unused")
@Column(name="cddiretoria", nullable=false, updatable=false, insertable=false)
private Integer diretoria;

@SuppressWarnings("unused")
@Column(name="cdcargodiretoria", nullable=false, updatable=false, insertable=false)
private Integer cargoDiretoria;

 



@ManyToOne
public CargoDiretoria getCargoDiretoria() {
return cargoDiretoria;
}

@ManyToOne
public Diretoria getDiretoria() {
return diretoria;
}
 


1º - Vc está mapeando os campos cddiretoria e cdcargodiretoria 2x..(acho que o hibernate nao suporta isso)
2º - Faltou o @JoinColumn no getDiretoria e no getCargoDiretoria

O NEO não suporta CRUDs para entidades de chave múltipla...


pedro.goncalves
Equipe
[Avatar]
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline

Pessoal.. quem quiser mapear chave múltipla.. ou passou por algum problema.. no mapeamento de chave múltipla.. segue código para que possam consultar posteriormente.. mais lembrando que telas de detalhe não é suportado pelo neo...

Code:
 import java.io.Serializable;
 
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 
 
 @Entity
 @org.hibernate.annotations.Entity(mutable = false)
 public class Componentediretoria implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	protected ComponentediretoriaId id;
 
 	protected Diretoria diretoria;
 
 	protected CargoDiretoria cargodiretoria;
 
 	protected Associado associado;
 
 	protected String chapa;
 
 	@javax.persistence.Id
 	public ComponentediretoriaId getId() {
 		return id;
 	}
 
 	@ManyToOne(fetch = FetchType.LAZY)
 	@JoinColumn(name = "cdassociado")
 	public Associado getAssociado() {
 		return associado;
 	}
 
 	@ManyToOne(fetch = FetchType.LAZY)
 	@JoinColumn(name = "cdcargodiretoria", insertable = false, updatable = false)
 	public CargoDiretoria getCargodiretoria() {
 		return cargodiretoria;
 	}
 
 	public String getChapa() {
 		return chapa;
 	}
 
 	@ManyToOne(fetch = FetchType.LAZY)
 	@JoinColumn(name = "cddiretoria", insertable = false, updatable = false)
 	public Diretoria getDiretoria() {
 		return diretoria;
 	}
 
 	public void setAssociado(Associado associado) {
 		this.associado = associado;
 	}
 
 	public void setCargodiretoria(CargoDiretoria cargodiretoria) {
 		this.cargodiretoria = cargodiretoria;
 	}
 
 	public void setChapa(String chapa) {
 		this.chapa = chapa;
 	}
 
 	public void setDiretoria(Diretoria diretoria) {
 		this.diretoria = diretoria;
 	}
 
 	public void setId(ComponentediretoriaId componentediretoriaId) {
 		this.id = componentediretoriaId;
 	}
 }
 


e o ID

Code:
 import java.io.Serializable;
 
 import javax.persistence.Embeddable;
 
 
 @Embeddable
 public class ComponentediretoriaId implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
 	protected Integer cddiretoria;
 
 	protected Integer cdcargodiretoria;
 
 	public Integer getCdcargodiretoria() {
 		return cdcargodiretoria;
 	}
 	
 	public ComponentediretoriaId() {}
 	
 	public ComponentediretoriaId(Integer cddiretoria, Integer cdcargodiretoria) {
 		this.cddiretoria = cddiretoria;
 		this.cdcargodiretoria = cdcargodiretoria;
 	}
 
 	public Integer getCddiretoria() {
 		return cddiretoria;
 	}
 
 	public void setCdcargodiretoria(Integer cdcargodiretoria) {
 		this.cdcargodiretoria = cdcargodiretoria;
 	}
 
 	public void setCddiretoria(Integer cddiretoria) {
 		this.cddiretoria = cddiretoria;
 	}
 
 	@Override
 	public boolean equals(Object arg0) {
 
 		if (arg0 instanceof ComponentediretoriaId) {
 			ComponentediretoriaId that = (ComponentediretoriaId) arg0;
 			return this.cdcargodiretoria.equals(that.cdcargodiretoria) && this.cddiretoria.equals(that.cddiretoria);
 		}
 		return false;
 	}
 
 	@Override
 	public int hashCode() {
 		return cddiretoria.hashCode() + cdcargodiretoria.hashCode();
 	}
 }
 


ehehe.. dps de um tempo quebrando a cabeça na linkcom.. está ai.. até para quem tinha perguntado antes!!! até!

Pedro Gonçalves
http://pedrogoncalves.com.br
[Email] [WWW] [MSN]
 
Índice dos Fóruns -> Dúvidas
Ir para:   
Powered by JForum 2.1.7 © JForum Team