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

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();
						}
				 }});
	}
	
		}

Tem que filtrar o event.SELECTED

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

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)

teria alguma forma de converter para string o estado?

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;
    }

    @Override
    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;
    }
    }

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();
						}
				 }});
	}
	
		}

acho que to quase la rs

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

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();
						}

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

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

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

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();
				}
			}
		});
	}

}

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();

@override
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:

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)

acho que falta pouca coisa acredito

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();
			}
		}
	});
}

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

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);