Erro de mapeamento?

9 respostas
Jarf

Olá galera,
fiz o mapeamento nas minhas classes e quando fui pra testar o que eu fiz aquie deu o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError at face.JanelaAddTabela$1.actionPerformed(JanelaAddTabela.java:89) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: dominio.Fato.chaveestrangeira at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:266) at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1448) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754) at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1319) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at dominio.HibernateFactory.<clinit>(HibernateFactory.java:20) ... 26 more

Acredito que esse erro tenha sido por causa do mapeamento que eu fiz porque estava rodando direitinho e dps do mapeamento que ficou dessa forma.
Alguem sabe me dizer o porque desse erro? =/

agradeço a ajuda de vocês!

[]'s

9 Respostas

lcegatti
@OneToMany, @ManyToMany or @CollectionOfElements: dominio.Fato.chaveestrangeira

Você está tentando fazer algum desses mapeamentos em um atributo que não é uma Collection, nesse caso (se for um relacionamento bidirecional) utilize @ManyToOne.

Qualquer coisa poste seu código ai.

[]'s

Jarf

Daeh Icegatti, blz cara?

Seguinte cara, vou te explicar melhor. Esta dando esse problema ai no relacionamento entre fato e chaveestrangeira. FATO ( idfato , idcubo) CHAVEESTRANGEIRA (idchaveestrangeira , idfato, iddimensão) sendo assim, um FATO pode ter varias chaves estrangeiras e uma chave estrangeira esta contida apenas em um fato. Então eu fiz o mapeamento da seguinte forma mas que pelo jeito esta errado =/ : Fato
@Entity
@SequenceGenerator(name="SEQ", sequenceName="hibernate_sequence4", allocationSize = 1)
public class Fato {
	
	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator ="SEQ")
	private Long idfato;
	
	private Long idcubo;
	
	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name="idcubo")
	private Cubo cubo;
	
	@OneToMany (mappedBy="chaveestrangeira")
	private ChaveEstrangeira chaveestrangeira;
	
	
	public ChaveEstrangeira getChaveestrangeira() {
		return chaveestrangeira;
	}
	public void setChaveestrangeira(ChaveEstrangeira chaveestrangeira) {
		this.chaveestrangeira = chaveestrangeira;
	}
	public Cubo getCubo() {
		return cubo;
	}
	public void setCubo(Cubo cubo) {
		this.cubo = cubo;
	}
	public Long getIdfato() {
		return idfato;
	}
	public void setIdfato(Long idfato) {
		this.idfato = idfato;
	}
	
	public Long getIdcubo() {
		return idcubo;
	}
	public void setIdcubo(Long idcubo) {
		this.idcubo = idcubo;
	}
	
	

}
ChaveEstrangeira
@Entity
@SequenceGenerator(name="SEQ", sequenceName="hibernate_sequence7", allocationSize = 1)
public class ChaveEstrangeira {
	
	@Id 
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ")
	private Long idchaveestrangeira;
	
	
	private Long idfato;
	private Long iddimensao;
	
	@OneToOne (cascade = CascadeType.ALL)
	@JoinColumn(name= "iddimensao")
	private Dimensao dimensao;
	
	@ManyToOne
	private Fato fato;
	
	@ManyToOne
	private Ligacao ligacao;
	
	
	public Ligacao getLigacao() {
		return ligacao;
	}
	public void setLigacao(Ligacao ligacao) {
		this.ligacao = ligacao;
	}
	public Fato getFato() {
		return fato;
	}
	public void setFato(Fato fato) {
		this.fato = fato;
	}
	public Dimensao getDimensao() {
		return dimensao;
	}
	public void setDimensao(Dimensao dimensao) {
		this.dimensao = dimensao;
	}
	public Long getIdchaveestrangeira() {
		return idchaveestrangeira;
	}
	public void setIdchaveestrangeira(Long idchaveestrangeira) {
		this.idchaveestrangeira = idchaveestrangeira;
	}
	public Long getIdfato() {
		return idfato;
	}
	public void setIdfato(Long idfato) {
		this.idfato = idfato;
	}
	public Long getIddimensao() {
		return iddimensao;
	}
	public void setIddimensao(Long iddimensao) {
		this.iddimensao = iddimensao;
	}

}

Está ai amigo :thumbup:

vlw pela ajuda!!!

lcegatti

O que você está querendo fazer é um relacionamento bidirecional de 1 --|| n, o certo de seus mapeamentos seria assim:

Na classe Fato:

@OneToMany (mappedBy="fato")  
private List<ChaveEstrangeira> chaveestrangeira;

Aqui você está definindo que 1 Fato pode ter n chaves estrangeiras, e no mappedBy vc defini que na classe ChaveEstrangeira no atributo fato está o mapeamento para este relacionamento.

Na classe ChaveEstrangeira:

@ManyToOne 
@JoinColumn(name="idfato")
private Fato fato;

Aqui você defini qual coluna está a FK desse seu relacionamento, neste caso idfato.

Ve se rola.

[]'s

Jarf

Aew brother, eu fiz daeh foi dando erro nos mapeamentos de um para varios e fui corrigindo conforme vc me explicou e agora deu erro em um mapeamento de 1 para 1 entre ChavePrimaria e Tabela.
ChavePrimaria(idchaveprimaria)
Tabela(idtabela, nome, idchaveprimaria)

ChavePrimaria
@Entity
@SequenceGenerator(name="SEQ", sequenceName="hibernate_sequence8", allocationSize = 1)
public class ChavePrimaria {
	
	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	private Long idchaveprimaria;
	
	@OneToOne (mappedBy= "tabela")
	private Tabela tabela;
	
	@OneToMany (mappedBy = "chaveprimaria")
	private List<Atributo> atributo;

	
	

	public Tabela getTabela() {
		return tabela;
	}

	public void setTabela(Tabela tabela) {
		this.tabela = tabela;
	}


	public List<Atributo> getAtributo() {
		return atributo;
	}

	public void setAtributo(List<Atributo> atributo) {
		this.atributo = atributo;
	}

	public Long getIdchaveprimaria() {
		return idchaveprimaria;
	}

	public void setIdchaveprimaria(Long idchaveprimaria) {
		this.idchaveprimaria = idchaveprimaria;
	}

}
Tabela
@Entity
@SequenceGenerator(name="SEQ",sequenceName="hibernate_sequence2", allocationSize = 1)
public class Tabela {
	
	@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ")
	private Long idtabela;
	
	@Column (nullable = true, length = 50)
	private String nome;
	
	@OneToOne (cascade= CascadeType.ALL)
	@JoinColumn (name="chaveprimaria")
	private ChavePrimaria chaveprimaria;
	
	@OneToMany (mappedBy = "tabela")
	private List<Atributo> atributo;
	
	
	
	public List<Atributo> getAtributo() {
		return atributo;
	}
	public void setAtributo(List<Atributo> atributo) {
		this.atributo = atributo;
	}
	public ChavePrimaria getChaveprimaria() {
		return chaveprimaria;
	}
	public void setChaveprimaria(ChavePrimaria chaveprimaria) {
		this.chaveprimaria = chaveprimaria;
	}
	public Long getIdtabela() {
		return idtabela;
	}
	public void setIdtabela(Long idtabela) {
		this.idtabela = idtabela;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	

}
Erro
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
	at face.JanelaAddTabela$1.actionPerformed(JanelaAddTabela.java:89)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6041)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
	at java.awt.Component.processEvent(Component.java:5806)
	at java.awt.Container.processEvent(Container.java:2058)
	at java.awt.Component.dispatchEventImpl(Component.java:4413)
	at java.awt.Container.dispatchEventImpl(Container.java:2116)
	at java.awt.Component.dispatchEvent(Component.java:4243)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
	at java.awt.Container.dispatchEventImpl(Container.java:2102)
	at java.awt.Window.dispatchEventImpl(Window.java:2440)
	at java.awt.Component.dispatchEvent(Component.java:4243)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on dominio.Tabela.chaveprimaria references an unknown entity: dominio.ChavePrimaria
	at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:81)
	at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:456)
	at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:438)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:309)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1319)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
	at dominio.HibernateFactory.<clinit>(HibernateFactory.java:20)
	... 26 more

pq esta dando esse erro agora? =/

lcegatti

Dois detalhes no seu relacionamento OneToOne:

@OneToOne (mappedBy= "chaveprimaria")  
private Tabela tabela;

No mappedBy vc deve colocar qual o atributo da sua classe Tabela que fornece os detalhes deste mapeamento, no seu caso o atributo chaveprimaria.

@OneToOne (cascade= CascadeType.ALL)  
@JoinColumn (name="idchaveprimaria")  
private ChavePrimaria chaveprimaria;

Aqui no @JoinColumn vc deve definir qual o campo na table Tabela é a FK para ChavePrimaria no seu caso: idchaveprimaria

:thumbup:

[]'s

Jarf

Eu alterei o que você me falou mas continuou dando erro =/

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError at face.JanelaAddTabela$1.actionPerformed(JanelaAddTabela.java:89) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on dominio.Tabela.chaveprimaria references an unknown entity: dominio.ChavePrimaria at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:81) at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:456) at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:438) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:309) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1319) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at dominio.HibernateFactory.<clinit>(HibernateFactory.java:20) ... 26 more

Jarf

Por que será que esta continuando com esse erro? :frowning:

lcegatti

Estranho cara, seus mapeamentos aparentemente estão certos :? .

Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on dominio.Tabela.chaveprimaria references an unknown entity: dominio.ChavePrimaria

Parece que que ele não está reconhecendo ChavePrimaria como uma entidade, e o erro está exatamente na sua classe Tabela onde vc definiu um atributo do tipo ChavePrimaria, da uma conferida no seu código, nos seus mapeamentos :thumbup: .

[]'s

Jarf

Consegui resolver aquele problema. Era porque eu não tinha declarado a classe chaveprimaria no HIbernateFactory.
Mas agora esta dando outro erro( pra variar :? ):

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError at face.JanelaAddTabela$1.actionPerformed(JanelaAddTabela.java:89) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: dominio.ChaveEstrangeira column: iddimensao (should be mapped with insert="false" update="false") at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:670) at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:692) at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:714) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468) at org.hibernate.mapping.RootClass.validate(RootClass.java:215) at org.hibernate.cfg.Configuration.validate(Configuration.java:1135) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at dominio.HibernateFactory.<clinit>(HibernateFactory.java:21) ... 26 more

Sabe me dizer que erro eh esse? =/

vlw!!
abraço!

Criado 31 de outubro de 2008
Ultima resposta 31 de out. de 2008
Respostas 9
Participantes 2