Pegar elemento da jcombobox para salvar no banco de dados Hibernate(RESOLVIDO)

20 respostas
java
D

Como posso pegar um elemento selecionado de uma jcombobox para salvar no banco de dados em hibernate?

Meu salvar esta assim:

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){//GEN-FIRST:event_jButton1ActionPerformed
				        // TODO add your handling code here:
				    	Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
						Transaction transacao = null;
				                Cidade cidade = new Cidade();
				                Estado estado = new Estado();

						try {
				                    cidade.setNome(textField.getText());
				                    cidade.setEstado((Estado) comboBox.getSelectedItem());
							transacao = sessao.beginTransaction();
							sessao.save(cidade);
							transacao.commit();
						} catch (RuntimeException erro) {
							if (transacao != null) {
								transacao.rollback();
							}
							throw erro;
						} finally {
							sessao.close();
						}
				 }});
	}
	
		}

20 Respostas

P

Tem que filtrar o event.SELECTED

D

eu ja fiz uma consulta agora so quero salvar ai vou ver o video

D

eu vi o video mas esta falando

que tem que ser uma string do jeito que esta nao da nenhum erro mas fala que tem que ser string

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){//GEN-FIRST:event_jButton1ActionPerformed
				        // TODO add your handling code here:
				    	Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
						Transaction transacao = null;
				                Cidade cidade = new Cidade();
				                Estado estado = new Estado();

						try {
				                    cidade.setNome(textField.getText());
				                    cidade.setEstado((Estado) comboBox.getSelectedItem());
							transacao = sessao.beginTransaction();
							sessao.save(cidade);
							transacao.commit();
						} catch (RuntimeException erro) {
							if (transacao != null) {
								transacao.rollback();
							}
							throw erro;
						} finally {
							sessao.close();
						}
				 }});
	}
Exception in thread AWT-EventQueue-0 java.lang.ClassCastException: java.lang.String cannot be cast to com.meson.sistemavendas.Domain.Estado

at com.meson.sistemavendas.Domain.Cidade.setEstado(Cidade.java:56)

at com.meson.sistemavendas.Tela.TelaCidade$2.actionPerformed(TelaCidade.java:134)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
D

teria alguma forma de converter para string o estado?

D

por que na minha classe cidade o estado é um objeto

package com.meson.sistemavendas.Domain;

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

/**
*

  • @author Dani
    
    */
    
    @SuppressWarnings(serial)
    
    @Entity
    
    public class Cidade implements Serializable{
    
    @Column(length = 50, nullable = false)
    
    private String nome;
    
    @ManyToOne
    
    @JoinColumn(nullable = false)
    
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    
    private Estado estado;
    
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    
    @Id
    
    private Long codigo;
    
    public Long getCodigo() {
    
    return codigo;
    
    }
    
    public void setCodigo(Long codigo) {
    
    this.codigo = codigo;
    
    }
    
    <a class="mention" href="/u/override">@Override</a>
    
    public String toString() {
    
    return “Cidade [nome=” + nome + “, estado=” + estado + “, codigo=” + codigo + “]”;
    
    }
    
    public String getNome() {
    
    return nome;
    
    }
    
    public void setNome(String nome) {
    
    this.nome = nome;
    
    }
    
    public Estado getEstado() {
    
    return estado;
    
    }
    
    public void setEstado(Estado estado) {
    
    this.estado = estado;
    
    }
    
    }
    
D

Alterei um pouco o codigo

agora da este erro

Hibernate: select this_.codigo as codigo1_1_0_, this_.nome as nome2_1_0_, this_.sigla as sigla3_1_0_ from Estado this_ order by this_.nome asc

[Estado[codigo=45]]

Hibernate: select nextval (hibernate_sequence)

Exception in thread AWT-EventQueue-0 org.hibernate.PropertyValueException: not-null property references a null or transient value : com.meson.sistemavendas.Domain.Cidade.estado

at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:108)

at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:56)

at org.hibernate.action.internal.AbstractEntityInsertAction.nullifyTransientReferencesIfNotAlready(AbstractEntityInsertAction.java:115)

at org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:124)

Classe Cidade

package com.meson.sistemavendas.Domain;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

/**
*

@author Dani
*/
@SuppressWarnings("serial")
@Entity
public class Cidade implements Serializable{
@Column(length = 50, nullable = false)
private String nome;

@ManyToOne(optional = true)
@JoinColumn(nullable = false)
private Estado estado;
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Long codigo;

public Long getCodigo() {
return codigo;
}

public void setCodigo(Long codigo) {
this.codigo = codigo;
}

@Override
public String toString() {
return String.format("%s[codigo=%d]", getClass().getSimpleName(), getCodigo());
}

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public Estado getEstado() {
return estado;
}

public void setEstado(Estado estado) {
this.estado = estado;
}
}

método salvar

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){//GEN-FIRST:event_jButton1ActionPerformed
				        // TODO add your handling code here:
				    	Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
						Transaction transacao = null;
				                Cidade cidade = new Cidade();
				                Estado estado = new Estado();

						try {
				                    cidade.setNome(textField.getText());
				                    estado.setCodigo((long) comboBox.getSelectedIndex());
							transacao = sessao.beginTransaction();
							sessao.save(cidade);
							transacao.commit();
						} catch (RuntimeException erro) {
							if (transacao != null) {
								transacao.rollback();
							}
							throw erro;
						} finally {
							sessao.close();
						}
				 }});
	}
	
		}
D

acho que to quase la rs

D

eu coloquei para printar o combobox estava selecionando o estado agora apareceu esse erro mas ja tentei resolver com algumas coisas que achei na net mas nao consegui

P

Não entendo muito de hibernate.

try {
    cidade.setNome(textField.getText());
    estado.setCodigo((long) comboBox.getSelectedIndex());
    cidade.setEstado(estado);//vc marcou o mapeamento como not null, então tem que setar
    transacao = sessao.beginTransaction();
    sessao.save(cidade);
    transacao.commit();
						}
D

Agora deu tudo esse pau aqui rsrs

Hibernate: insert into Cidade (estado_codigo, nome, codigo) values (?, ?, ?)

dez 31, 2019 2:57:03 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions

WARN: SQL Error: 0, SQLState: 23503

dez 31, 2019 2:57:03 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions

ERROR: ERROR: insert or update on table cidade violates foreign key constraint fkqed4xf4didnaoj5gas05bjwd9

Detalhe: Key (estado_codigo)=(1) is not present in table estado.

dez 31, 2019 2:57:03 PM org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure

ERROR: HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute statement]

Exception in thread AWT-EventQueue-0 javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)

at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1460)

at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511)

at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3283)

at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2479)

at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39)

at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:271)

at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:98)

at com.meson.sistemavendas.Tela.TelaCidade$2.actionPerformed(TelaCidade.java:122)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)

Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement

at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:112)

at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)

at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3171)

at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3686)

at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90)

at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)

at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)

at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)

at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39)

at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454)

 45 more

Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table cidade violates foreign key constraint fkqed4xf4didnaoj5gas05bjwd9

Detalhe: Key (estado_codigo)=(1) is not present in table estado.

at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)

at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1927)

at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)

at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:562)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:420)

at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:366)

at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)

 53 more
D

Fala que aquele codigo 1 nao esta presente na tabela estado agora me pegou hem de como fazer isso :confused:

D

eu alterei um pouco o codigo ele até ta salvando assim mas nao ta pegando elemento da combobox

rsrs esta imprimindo codigo estado null

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Cidade cidade = new Cidade();
				Estado estado = new Estado();

				try {
					//cidade.setNome(textField.getText());
					//cidade.setCodigo((long) comboBox.getSelectedIndex());
					//cidade.setEstado(estado);// vc marcou o mapeamento como not null, então tem que setar
					Criteria consulta = sessao.createCriteria(Cidade.class);
					consulta.add(Restrictions.eq("estado.codigo", estadoCodigo));	
					consulta.addOrder(Order.asc("nome"));
					List<Cidade> resultado = consulta.list();
					cidade.setNome(textField.getText());
					System.out.println(estadoCodigo);
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}

}

não sei se vai saber me ajudar mas se conseguir rs

D

acho que pode ser algo do tipo
é por que a java estrangeira é o codigo do estado então na combobox ta entrando o codigo do estado junto com a sigla tipo codigo 57 estado RS codigo 50 estado SC e assim por diante

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Cidade cidade = new Cidade();
				Estado estado = new Estado();

				try {
					//cidade.setNome(textField.getText());
					//cidade.setCodigo((long) comboBox.getSelectedIndex());
					//cidade.setEstado(estado);// vc marcou o mapeamento como not null, então tem que setar
					Criteria consulta = sessao.createCriteria(Cidade.class);
					consulta.addOrder(Order.asc("nome"));
					List<Cidade> resultado = consulta.list();
					cidade.setNome(textField.getText());
					cidade.setEstado(comboBox.getSelectedIndex()(estado.getCodigo()));
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}

}
P

Esse erro não é do java, é uma excessão do sql.
Veja, quando você criou banco de dados, disse que a entidade cidade se relaciona com a entidade estado.
E este relacionamento se dá por meio de uma chave estrangeira.

Se você abrir o banco de dados e olhar o id de cada estado vai ver que pode não ser o mesmo passado pelo comboEstado.getSelectedIndex();

O erro está aí.

O combobox.getSelectedIndex vai de 0 a 26 por serem 26 estados e um distrito federal.
Embora os “estados” sejam 27, o getSelectedIndex se refere ao index do combobox não ao id do estado existente no banco de dados:

Ou seja, o combo.getSelectedIndex() não está associado ao id do estado constante no banco de dados.

Assim, a implementação de sua aplicação está indiretamente trabalhando com probabilidade e não com lógica, este é o problema.

Quais as soluções?
1: o combobox trabalha com generics.
Problema: não dá pra ensinar isto por aqui, mas é bem básico.

JCombobox<Estado> comboEstado = new JComboBox<>();
Aí você tem que sobrescrever o método toString();

<a class="mention" href="/u/override">@override</a>

public toString(){

return estado.getNome();

}

Quando você for fazer a persistência você usa por exemplo:

Estado estado = comboEstado.getSelectedItem();
Depois cidade.setEstado(estado);

Ocorre que seu JCombobox<String> é diferente de um JCombobox<Estado>.

Veja, no primeiro caso o comboEstado.getSelectedItem() retorna uma String.
No segundo caso o comboEstado.getSelectedItem() retorna um estado, ou seja, são retornos diferentes por meio do generics.

Isto nos coloca na segunda opção: a gambiarra.
Você pode criar um List.

Assim à medida em que você popular o combobox você popular o List listEstados.

Exemplo:

comboEstado.addItem(estado.getNome());
listEstado.add(estado);

Quando você for persistir você pode pegar o estado pela lista é não pelo combobox.

Assim no lugar de fazer combo.getSelextedIndex(), você faz:

Estado estado = listCidades.get(comboEstado.getSelectedIndex());
    Cidade cidade.setEstado(estado);

Lembrando que QUALQUER implementação sem generics é uma gambiarra em minha concepção :grin:

D

Eu sobrescrevi tudo mas ainda nao deu certo

a lista no add item se coloco addItem(estado.getSigla());
da erro falaa que estado não é do tipo string ai nao aparece a sigla e sim estado codigo = null no combobox

código da lista

JComboBox<Estado> comboBox = new JComboBox<>();
		Estado estado = new Estado();
		Criteria consulta = sessao.createCriteria(Estado.class);
		consulta.addOrder(Order.asc("nome"));
		List<Estado> resultado = consulta.list();
		comboBox.addItem(estado);
		resultado.add(estado);

Código do persist

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Cidade cidade = new Cidade();

				try {
					Estado estado = new Estado();
					//cidade.setNome(textField.getText());
					//cidade.setCodigo((long) comboBox.getSelectedIndex());
					//cidade.setEstado(estado);// vc marcou o mapeamento como not null, então tem que setar
					cidade.setNome(textField.getText());
					Estado est = resultado.get(comboBox.getSelectedIndex());
					cidade.setEstado(estado);
					System.out.println(estado);
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}

aqui acontece este erro ao persistir

Exception in thread AWT-EventQueue-0 org.hibernate.PropertyValueException: not-null property references a null or transient value : com.meson.sistemavendas.Domain.Estado.nome

at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:108)

at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:56)

at org.hibernate.action.internal.AbstractEntityInsertAction.nullifyTransientReferencesIfNotAlready(AbstractEntityInsertAction.java:115)

at org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:124)

at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:289)

at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263)

at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:250)

at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:367)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:292)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:200)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)

at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:678)

at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:670)

at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:219)

at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:471)

at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:396)

at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:197)

at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:130)

at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:455)

at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)

at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:200)

at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)

at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)

at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)

at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)

at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:709)

at org.hibernate.internal.SessionImpl.save(SessionImpl.java:701)

at org.hibernate.internal.SessionImpl.save(SessionImpl.java:696)

at com.meson.sistemavendas.Tela.TelaCidade$2.actionPerformed(TelaCidade.java:133)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$500(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.awt.EventQueue$3.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.awt.EventQueue$4.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)
D

acho que falta pouca coisa acredito

D

agora salvou fiz uma alteração

public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed

// TODO add your handling code here:

Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();

Transaction transacao = null;

Cidade cidade = new Cidade();
try {
				//cidade.setNome(textField.getText());
				//cidade.setCodigo((long) comboBox.getSelectedIndex());
				//cidade.setEstado(estado);// vc marcou o mapeamento como not null, então tem que setar
				cidade.setNome(textField.getText());
				Estado est = resultado.get(comboBox.getSelectedIndex());
				cidade.setEstado(est);
				System.out.println(est);
				transacao = sessao.beginTransaction();
				sessao.save(cidade);
				transacao.commit();
				transacao = sessao.beginTransaction();
				sessao.save(cidade);
				transacao.commit();
			} catch (RuntimeException erro) {
				if (transacao != null) {
					transacao.rollback();
				}
				throw erro;
			} finally {
				sessao.close();
			}
		}
	});
}
D

agora so falta o additem la encima que é para mostrar a sigla rs

D

unico errinho nesta linha que eu preciso que mostre a sigla no combobox rsrs

`comboBox.addItem(estado.getSigla());`

Fala que não é do tipo estado e não é aplicavel para string

desse jeito estava dando certo por que o combobox nao era do tipo estado antes rsrsrs

for (Estado estado_ : resultado) {
	comboBox.addItem(estado_.getSigla());

este foi o codigo que ta agora

JComboBox<Estado> comboBox = new JComboBox<>();
		Estado estado = new Estado();
		Criteria consulta = sessao.createCriteria(Estado.class);
		consulta.addOrder(Order.asc("nome"));
		List<Estado> resultado = consulta.list();
		comboBox.addItem(estado.getSigla());  linha que esta dando erro falando que o tipo estado não é aplicavel para string
		resultado.add(estado);
D

Resolvi desse jeito

Método listar

JComboBox<String> comboBox = new JComboBox<>();
		Estado estado = new Estado();
		Criteria consulta = sessao.createCriteria(Estado.class);
		consulta.addOrder(Order.asc("nome"));
		List<Estado> resultado = consulta.list();
		System.out.println(resultado);
		for (Estado estado_ : resultado) {
			comboBox.addItem(estado_.getSigla());
			}

agora quero deixa aqui pra ajudar as outras pessoas

meu salvar

btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {// GEN-FIRST:event_jButton1ActionPerformed
				// TODO add your handling code here:
				Session sessao = HibernateUtil.getFabricaDeSessoes().openSession();
				Transaction transacao = null;
				Cidade cidade = new Cidade();

				try {
					//cidade.setNome(textField.getText());
					//cidade.setCodigo((long) comboBox.getSelectedIndex());
					//cidade.setEstado(estado);// vc marcou o mapeamento como not null, então tem que setar
					cidade.setNome(textField.getText());
					Estado est = resultado.get(comboBox.getSelectedIndex());
					cidade.setEstado(est);
					System.out.println(est);
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
					transacao = sessao.beginTransaction();
					sessao.save(cidade);
					transacao.commit();
				} catch (RuntimeException erro) {
					if (transacao != null) {
						transacao.rollback();
					}
					throw erro;
				} finally {
					sessao.close();
				}
			}
		});
	}

}

tudo certo agora

Criado 30 de dezembro de 2019
Ultima resposta 1 de jan. de 2020
Respostas 20
Participantes 2