2013-08-02 2 views
1

J'ai le problème suivant, en essayant d'insérer un objet dans la base de données Hibernate est bloqué, aucune erreur retournée, l'objet n'est pas enregistré correctement.Hibernate ne sauvegarde pas l'objet dans la base de données?

déboguer j'ai découvert qu'il se bloque à

Hibernate: select nextval('hibernate_sequence') 

J'utilise PostgreSQL comme base de données.

Mon fichier de configuration:

<hibernate-mapping> 
    <class name="src.MyClass" table="MyClass"> 

    <cache usage="read-write"/> 

    <id name="id" column="classid"> 
     <generator class="native" /> 
    </id> 

    <property name="name" column="name" not-null="true" unique="true" length="160"/> 

</class> 
</hibernate-mapping> 

@Override 
public void save(Myclass mc) 
{ 
    Session session = sessionFactory.getCurrentSession(); 

    session.save(mc); 
} 

Les travaux de commande SELECT.

Je ne suis pas sûr de ce qui me manque. Utilisant également la commande native SQL Insert, cela fonctionne.

+1

OMG, s'il vous plaît utiliser les annotations. Ne perdez pas votre temps avec xml lorsque JPA 2 existe :) –

+1

La séquence 'hibernate_sequence' existe-t-elle? –

+1

Vous devez vous assurer que begin() et commit() (ou flush() après save() dans Session?) Un transaccion à l'intérieur de votre objet Session pour que save() fonctionne –

Répondre

4

Je did'nt vous voyez que le rinçage de votre session

Session session = sessionFactory.openSession(); 
session.save(mc); 
session.flush(); 
session.close(); 

Mais le plus préférable est

Session session = factory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 
     session.save(mc); 
     tx.commit(); // Flush happens automatically 
    } 
    catch (RuntimeException e) { 
     tx.rollback(); 
     throw e; // or display error message 
    } 
    finally { 
     session.close(); 
    } 
+0

Il a travaillé avec flush. Lol J'ai perdu beaucoup de temps sur cette question. Au moins, j'ai appris à déboguer avec Hibernate ... Merci – Mythul

+0

@Mythul Heureux que ça a aidé :) –

+0

Merci beaucoup! Appeler session.flush() a aidé! Ce qui est intéressant, lors de l'utilisation de MySQL tout a fonctionné sans explicite rinçage très bien. J'avais besoin de ceci pour le problème que j'ai décrit ici: http://stackoverflow.com/questions/40708288/atomikos-data-not-getting-saved-when-using-postgresql – informatik01

Questions connexes