style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Problema al guardar en la base de datos MutableComboBoxModel

Supongo que es el MutableComboBoxModel porque tengo otras ventanas y me funcionan perfectamente, pero en esta tuve que realizar un MutableComboBoxModel para visualizar un ComboBox que depende de otro.

package modelo.Ciudad;

import entidades.Ciudad;
import java.io.Serializable;
import java.util.List;
import javax.swing.AbstractListModel;
import javax.swing.MutableComboBoxModel;

public class ModeloComboboxMutableCiudad extends AbstractListModel implements MutableComboBoxModel, Serializable{

    Ciudad ciudad;    
    List<Ciudad> listaciudad;

    public ModeloComboboxMutableCiudad(List<Ciudad> ciudades){
        this.listaciudad = ciudades;
    }
       
    @Override
    public int getSize() {
        return listaciudad.size();
    }

    @Override
    public Object getElementAt(int index) {
        return listaciudad.get(index).toString();
    }

    @Override
    public void addElement(Object o) {
        listaciudad.add((Ciudad) o);
        fireIntervalAdded(this,listaciudad.size()-1, listaciudad.size()-1);
        if ( listaciudad.size() == 1 && ciudad == null && o != null ) {
            setSelectedItem(o);
        }
    }

    @Override
    public void removeElement(Object obj) {
        int index = listaciudad.indexOf(obj);
        if ( index != -1 ) {
            removeElementAt(index);
        }
    }

    @Override
    public void insertElementAt(Object o, int index) {
        listaciudad.add(index, (Ciudad) o);
    }

    @Override
    public void removeElementAt(int index) {
    if ( getElementAt( index ) == ciudad ) {
        if ( index == 0 ) {
            setSelectedItem( getSize() == 1 ? null : getElementAt( index + 1 ) );
        }else {
            setSelectedItem( getElementAt( index - 1 ) );
        }
    }
    listaciudad.remove(index);
    fireIntervalRemoved(this, index, index);
    }

    @Override
    public void setSelectedItem(Object o) {
        if (o != null && listaciudad.size() > 0){
            for (Ciudad p : listaciudad){
                if (p.toString().equals(o.toString())){
                    ciudad = p;
                    break;
                }
            }
        }
    }

    @Override
    public Object getSelectedItem() {
        return ciudad;    
    }
   
}

Este el hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="entidades.Municipio" table="MUNICIPIO">
    <id column="idmunicipio" name="idmunicipio">
        <generator class="increment">
        </generator>
    </id>
    <property name="municipio"/>
      <many-to-one name="ciudad" column="idciudad" class="entidades.Ciudad"
               cascade="save-update">          
      </many-to-one>
  </class>
    <query name="TodoslosMunicipios">
         SELECT p FROM Municipio p order by p.idmunicipio asc
  </query>
</hibernate-mapping>

Codigo del boton Guardar

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {                                          

        Ciudad ciudad = (Ciudad) cbxCiudad.getSelectedItem();
        Municipio municipio = new Municipio();
        MunicipioDAO municipiodao = new MunicipioDAO();
        municipio.setMunicipio(txtMunicipio.getText());
        municipio.setCiudad(ciudad);
        municipiodao.guardarMunicipio(municipio);
        this.bloquearBotonesEdicion();
        this.bloquear();
        tblMunicipios.removeAll();
        this.limpiar();
    }

Esto esta en el DAO

    public void guardarMunicipio(Municipio municipio) throws HibernateException {
        long id = 0;
       
        try {
           
            iniciarOperacion();
            id = (Long) sesion.save(municipio);
            tx.commit();
           
        } catch (HibernateException he) {
            manejaException(he);
            throw he;
        } finally {
            sesion.close();
        }
       
    }

    public void iniciarOperacion() throws HibernateException {
       
        sesion = HibernateUtil.getSessionFactory().openSession();
        tx = sesion.beginTransaction();
    }
   
    public void manejaException(HibernateException he) throws HibernateException{
       
        tx.rollback();
        throw new HibernateException("Ocurrio un error en la capa de acceso a datos. ", he);
    }

Esta es la clase de Municipio

package entidades;

import java.io.Serializable;

public class Municipio implements Serializable {
   
    long idmunicipio;
    String municipio;
    Ciudad ciudad;
   
    public Municipio (){
       
    }
    public long getIdmunicipio() {
        return idmunicipio;
    }

    public void setIdmunicipio(long idmunicipio) {
        this.idmunicipio = idmunicipio;
    }

    public String getMunicipio() {
        return municipio;
    }

    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }

    public Ciudad getCiudad() {
        return ciudad;
    }

    public void setCiudad(Ciudad ciudad) {
        this.ciudad = ciudad;
    }

    @Override
    public String toString() {
        return municipio;
    }

}

Este es el Error

Exception in thread "AWT-EventQueue-0" org.hibernate.HibernateException: Ocurrio un error en la capa de acceso a datos.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">