首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Hibernate 保存不出错,但数据库没有数据是什么原因,该如何解决

2012-04-02 
Hibernate 保存不出错,但数据库没有数据是什么原因Dept d new Dept()d.setDeptId(999999)d.setDeptCo

Hibernate 保存不出错,但数据库没有数据是什么原因
Dept d =new Dept();
d.setDeptId("999999");
d.setDeptCode ("999999");
d.setDeptName ("999999");
d.setHospitalId("1");
DeptDAO a =new DeptDAO();

Transaction tx = a.getSession().beginTransaction();
try {
a.save(d);
} catch (Exception e) {
tx.rollback(); 

tx.commit();

2012-02-05 15:43:40,390 INFO [org.hibernate.impl.SessionFactoryObjectFactory] - Not binding factory to JNDI, no JNDI name configured
2012-02-05 15:43:40,390 DEBUG [org.hibernate.impl.SessionFactoryImpl] - instantiated session factory
2012-02-05 15:43:40,390 DEBUG [org.hibernate.impl.SessionFactoryImpl] - Checking 0 named HQL queries
2012-02-05 15:43:40,390 DEBUG [org.hibernate.impl.SessionFactoryImpl] - Checking 0 named SQL queries
2012-02-05 15:43:40,390 DEBUG [org.hibernate.impl.SessionImpl] - opened session at timestamp: 13284278203
2012-02-05 15:43:40,390 DEBUG [org.hibernate.event.def.DefaultSaveOrUpdateEventListener] - saving transient instance
2012-02-05 15:43:40,390 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] - generated identifier: 999999, using strategy: org.hibernate.id.Assigned
2012-02-05 15:43:40,406 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] - saving [Map.Dept#999999]
2012-02-05 15:43:40,421 DEBUG [Map.DeptDAO] - save successful
2012-02-05 15:43:40,421 DEBUG [org.hibernate.transaction.JDBCTransaction] - commit
2012-02-05 15:43:40,421 DEBUG [org.hibernate.impl.SessionImpl] - automatically flushing session
2012-02-05 15:43:40,421 DEBUG [org.hibernate.jdbc.JDBCContext] - before transaction completion
2012-02-05 15:43:40,421 DEBUG [org.hibernate.impl.SessionImpl] - before transaction completion
2012-02-05 15:43:40,421 DEBUG [org.hibernate.transaction.JDBCTransaction] - committed JDBC Connection
2012-02-05 15:43:40,421 DEBUG [org.hibernate.jdbc.JDBCContext] - after transaction completion
2012-02-05 15:43:40,421 DEBUG [org.hibernate.jdbc.ConnectionManager] - aggressively releasing JDBC connection
2012-02-05 15:43:40,421 DEBUG [org.hibernate.jdbc.ConnectionManager] - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
2012-02-05 15:43:40,421 DEBUG [org.hibernate.connection.DriverManagerConnectionProvider] - returning connection to pool, pool size: 1
2012-02-05 15:43:40,421 DEBUG [org.hibernate.impl.SessionImpl] - after transaction completion

[解决办法]
你写的是神马乱七八糟的代码啊?????
好好看看Hibernate自带的demo里面是怎么写的
org.hibernate.auction.Main这个类:

Java code
    /**     * Demonstrates detached object support     */    public void changeUserDetails(User user) throws Exception {        System.out.println("Changing user details for: " + user.getId() );        Session s = factory.openSession();        Transaction tx=null;        try {            tx = s.beginTransaction();            s.merge(user);            tx.commit();        }        catch (Exception e) {            if (tx!=null) tx.rollback();            throw e;        }        finally {            s.close();        }    }
[解决办法]
把DeptDAO 贴一下看看
[解决办法]
检查事务有没提交。


hibernate有一个自动提交事务的配置

<property name="hibernate.connection.autocommit">true</property>
[解决办法]
你们没发现他些的代码顺序都有问题???事务都没提交进行回滚呢?还有Hibernate的所有操作都离不开session,他的session呢?只是在开启事务那里用到了,最后还没有关闭session 。。。。
[解决办法]
Not binding factory to JNDI, no JNDI name configured


错误是HIBERNATE和数据库的配置问题

LZ你怎么配置的
[解决办法]
两个session不一致吧. 试着把事务放到save方法里面.
[解决办法]

探讨

1楼的DEMO代码,是可以运行,但太初级,不能完成真正的应用。比如一个事务要对十几个表和过程,函数等交互时就不行了。如在保存A 时还要保存B C 而且要执行 X 个过程,还要调用只能实时执行的SQL函数,就是说生成的DAO结合原生的SQL形在一个事务。所以要反事务提出来放在DAO类的处面。不知我说清没。

[解决办法]
a.getSession().beginTransaction();
try {
a.save(d);

a是session么?还是session的子类?这种写法很有趣,但是很没实用性诶。
获取session,开事务,操作,关事务,关session。
比如 

Session session=**** //不管你怎样获取到session。。。
session.beginTransaction();
session.save(b);
//异常自己套上
session.getCurrentTransaction().commit();
session.close();//thread获取currentSession的话就不用加这句了吧

热点排行