Error salvando con Hibernate

Hola este es mi primera vez en la lista.

He estado haciendo pruebas con Hibernate y pues me han funcionado cosas como consultar datos etc pero al momento de guardar datos no me funciona, lo más extraño que corro en modo debug y en modo normal y no me aparece nada, simplemente guardo y nada no hay ningun cambio. Mis archivos de mapeo.

<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hibernate.test.Persona" table="persona" schema="public" lazy="false">
        <id name="cedula" type="java.lang.String">
            <column name="cedula" length="11" />
            <generator class="assigned" />
        </id>
        <property name="primernombre" type="java.lang.String">
            <column name="primernombre" length="20" not-null="true" />
        </property>
        <property name="segundonombre" type="java.lang.String">
            <column name="segundonombre" length="20" />
        </property>
        <property name="primerapellido" type="java.lang.String">
            <column name="primerapellido" length="20" not-null="true" />
        </property>
        <property name="segundoapellido" type="java.lang.String">
            <column name="segundoapellido" length="20" />
        </property>
        <property name="foto" type="java.lang.String">
            <column name="foto" />
        </property>
        <property name="estado" type="java.lang.String">
            <column name="estado" length="1" not-null="true" />
        </property>
        <set name="contribucions" inverse="true" lazy="true" cascade="all-delete-orphan">
            <key>
                <column name="cedula" length="11" not-null="true" />
            </key>
            <one-to-many class="com.hibernate.test.Contribucion" />
        </set>
    </class>
</hibernate-mapping>
<?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">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.hibernate.test.Contribucion" table="contribucion" schema="public">
        <composite-id name="id" class="com.hibernate.test.ContribucionId">
            <key-property name="idcontribucion" type="java.lang.Integer">
                <column name="idcontribucion" />
            </key-property>
            <key-many-to-one name="operativo" class="com.hibernate.test.Operativo">
                <column name="idoperativo" />
            </key-many-to-one>
        </composite-id>
        <many-to-one name="persona" class="com.hibernate.test.Persona" fetch="select">
            <column name="cedula" length="11" not-null="true" />
        </many-to-one>
        <property name="fecha" type="java.util.Date">
            <column name="fecha" length="13" not-null="true" />
        </property>
        <property name="hora" type="java.sql.Time">
            <column name="hora" length="15" not-null="true" />
        </property>
        <property name="monto" type="java.lang.Double">
            <column name="monto" precision="17" scale="17" not-null="true" />
        </property>
        <property name="estado" type="java.lang.String">
            <column name="estado" length="1" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

Intengo algo como esto:

Persona persona = new Persona();
                persona.setCedula("123444");
                persona.setPrimernombre("LEO");
                persona.setPrimerapellido("ASASAS");
                persona.setEstado("A");
               
                personaDao.save(persona);

y no funciona tambien intente haciendo lo mismo pero haciendo la Session a mano luego beginTransaction y commit pero igual sin resultados.

Gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de rasilvap

puede ser

Puede que haga falta hacer un session.flush(), despues del session.persist(), o como lo estes manejando...

De hecho

No hago ninguno de ellos ya he usado Hibernate y normamente lo hago asi (y funciona) el problema creo que viene en la definicion de los archivos de mapeo.

Imagen de ezamudio

personaDao.save()

Habría que ver tu método save() en el personaDao. Seguramente se queda la sesión abierta y no le dan flush() ni close() y por eso no se guarda nada.

Imagen de rasilvap

Algo Parecido

A mi me pasa algo parecido con un proyecto que en windows funciona perfecto, lo pase a linux y no hace las transacciones, todo lo hace desde caché,
y a un companero en linux el mismo poryecto le funciona bien, no tengo la menor idea de porque pasa esto, pero todo queda en la cache no se si sea asuntos del Tomcat, estoy usando la misma bd q me funciona en windows perfecto, no se que pueda ser.

gracias

este es

Este es el metodo, es generado por el Hibernate Tools de MyEclipse

        public void save(Persona transientInstance) {
                log.debug("saving Persona instance");
                try {
                        getSession().save(transientInstance);
                        log.debug("save successful");
                } catch (RuntimeException re) {
                        log.error("save failed", re);
                        throw re;
                }
        }

¿Esta bien el archivo de mapeo? Tengo mis dudas

Imagen de ezamudio

le atiné

No hay session.close() ni session.flush() ni session.persist() ni nada; si nadie cierra la sesión, se puede quedar en cache la instancia nueva y no llega a guardarse en la base de datos.

Si el DAO está envuelto en un proxy de los de Spring que auto-cierran las sesiones entonces la bronca debe ser otra. Pero si usas ese DAO así como está, ese código no garantiza que la instancia se guarde en la base de datos (alguien más puede incluso obtener esa sesión y cancelar las operaciones que tenga pendientes).

Que me recomiendas?

Que me recomiendas que use o ponga? La verdad que no estoy manejando desde spring.

Imagen de AlexSnake

close();

Ya lo menciono ezamudio, solo pon el close.
Yo tmb genere los DAO con MyEclipse y tmb tuve ese problema.

                try {
                        getSession().save(transientInstance);
                        log.debug("update successful");
                } catch (RuntimeException re) {
                        log.error("update failed", re);
                        throw re;
                }finally{
                        getSession().close();
                }

Saludos

Aun nada

Lo puse de esa manera y aun nada, intente probar directamente con Session sin usar el DAO y tampoco

Imagen de AlexSnake

commit();

Tal vez te hace falta poner el comit, si no mal recuerdo es algo asi: getSesion().beginTransaction().commit();

Empiezo a desesperarme

Sigue sin funcionar. No me termino de confiar del archivo de mapeo.

Imagen de ezamudio

mapeo

Si crees que tu problema es el mapeo, piensa que solamente hay dos opciones cuando tienes mal el mapeo:

1. La aplicación arroja excepciones al intentar leer datos o escribir a la base porque el mapeo está mal.
2. La aplicación guarda los datos en lugares donde no los esperas (buscas en la tabla Persona y resulta que se guardaron en Person, o cosas así).

No arroja

La cosa es que no arroja excepciones en ninguna parte y pues estuve revisando y ninguna de las tablas se afecto, las operaciones de por ejemplo consultar si las hace perfectas pero no las de guardar.