Erro ao tentar inserir dados

10 respostas
J

Olá galera, eu estou tentando inserir dados em minha tabela mas ocorre o seguinte erro:

Exception in thread "AWT-EventQueue-0" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137) at controle.TabelaDAO.salvar(TabelaDAO.java:23) at face.JanelaAddTabela$1.actionPerformed(JanelaAddTabela.java:95) 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: java.sql.BatchUpdateException: Batch entry 0 insert into Tabela (idchaveprimaria, nome, DTYPE, idtabela) values (NULL, Produto5, 'Tabela', 11) was aborted. Call getNextException to see the cause. at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2530) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1317) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:350) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2592) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) ... 34 more

Alguem sabe porque está acontecendo esse erro?
Se precisarem das classes só falar que eu coloco aqui.

Obrigado pela ajuda de todos!!!

10 Respostas

M

pelo jeito ta dando erro ao converte algum valor
posta a classe onde vc ta fazendo o insert

J
Essa é a classe onde estou fazendo insert:
@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;
	
	
	//private Long idchaveprimaria;
	
	@OneToOne (cascade= CascadeType.ALL)
	@JoinColumn (name="idchaveprimaria")
	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;
	}
	
	
}
Código "dentro" da janela para inserir os dados:
...
public void actionPerformed(java.awt.event.ActionEvent e) {
					
					Session session = new HibernateFactory().getSession();
					
					Tabela t = new Tabela();
					t.setNome(nome.getText());
					
					TabelaDAO tabelaDAO = new TabelaDAO(session);
					tabelaDAO.salvar(t);
					
					session.close();
					
				}
...
J

No erro ele coloca os atributos da tabela entre parenteses, mas esse DTYPE eu não tenho na minha tabela, o que seria esseDTYPE?

R

Oi,

Tente o seguinte:

F

Lá no strack trace diz:

E em seu código tem uma linha comentada:

J

Não deu certo Rafael. =/

Então fiaux, essa linha está comentada por que se eu rodar com ela, da erro dizendo que tem coluna duplicada.

Esse erro:

esse erro aí que da ;(

F

O que tem em ChavePrimaria?

J
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= "chaveprimaria")
	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;
	}

}

era na classe mesmo que você queria saber?

F

Sim.
Mas você mapeou duas vezes o sequence generator? Acho que o problema está nessa maneira como fez a chave primária, porém, eu não saberia exatamente como ajudar.

J

O Sequence Generator eu colocquei um para cada tabela.
Onde você acha que pode estar errado?

Vlw pela ajuda mesmo assim :smiley:

Criado 7 de novembro de 2008
Ultima resposta 7 de nov. de 2008
Respostas 10
Participantes 4