2013-08-02 77 views
1

我试图在数据库中插入一个对象时出现以下问题Hibernate卡住了,没有错误返回,对象没有正确保存。休眠不保存数据库中的对象?

调试它,我发现它挂在

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

SELECT部分​​作品。

我不确定我错过了什么。 也使用本机SQL插入命令,它的工作原理。

+1

OMG,请使用注解。当JPA 2存在时,不要浪费y/ou/r时间:) –

+1

序列'hibernate_sequence'是否存在? –

+1

你需要确定你在session()中的save()后开始()和提交()(或者它是flush()吗?)Session对象内部的transaccion让save()工作 –

回答

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