2013-08-02 4 views
1

У меня возникает следующая проблема: при попытке вставить объект в базу данных Hibernate застревает, ошибка не возвращается, объект не сохраняется правильно.Hibernate не сохраняет объект в базе данных?

Debugging его я узнал, что он висит на

Hibernate: select nextval('hibernate_sequence') 

Я использую PostgreSQL в качестве базы данных.

Мой конфигурационный файл:

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

В ВЫБЕРИТЕ часть работы.

Я не уверен, что мне не хватает. Также, используя встроенную команду SQL Insert, она работает.

+1

OMG, пожалуйста, используйте аннотации. Не тратьте время y/ou/r с помощью xml, если существует JPA 2 :) –

+1

Существует ли последовательность «hibernate_sequence»? –

+1

Вы должны быть уверены, что вы начинаете() и совершаете() (или это было flush() после сохранения() в сеансе?) Трансакция внутри объекта Session для вашего сохранения() для работы –

ответ

4

Я did'nt видеть, что промывку сеанс

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

Но наиболее предпочтительным является

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

Он работал с флешем. Лол, я потратил много времени на эту проблему. По крайней мере, я научился отлаживать с Hibernate ... Спасибо – Mythul

+0

@ Mythul Рад, что это помогло :) –

+0

Большое спасибо! Вызов session.flush() помог! Что интересно, при использовании MySQL все работает без экспликации, просто отлично. Мне было нужно это для проблемы, описанной здесь: http://stackoverflow.com/questions/40708288/atomikos-data-not-getting-saved-when-using-postgresql – informatik01

Смежные вопросы