Hibernate3环境

1. 相关JAR包

    hibernate3.jar
    antlr.jar
    asm.jar
    asm-attrs.jars
    cglib.jar
    commons-collections.jar
    commons-logging.jar
    dom4j.jar
    ehcache.jar
    jta.jar
    log4j.jar 

 

2. 获取SessionFactory时报异常:net/sf/ehcache/CacheException

代码

Configuration configuration = new Configuration()
    .addResource("com/metaarchit/bookshop/Book.hbm.xml")
    .setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
    .setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver")
    .setProperty("hibernate.connection.url", "jdbc:hsqldb:hsql://localhost/BookShopDB")
    .setProperty("hibernate.connection.username", "sa")
    .setProperty("hibernate.connection.password", "")

    .setProperty("hibernate.cache.provider_class", "org.hibernate.cache.EhCacheProvider");


SessionFactory factory = configuration.buildSessionFactory();

 

异常:

Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ehcache/CacheException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
    at java.lang.Class.getConstructor0(Class.java:2640)
    at java.lang.Class.newInstance0(Class.java:321)
    at java.lang.Class.newInstance(Class.java:303)
    at org.hibernate.cfg.SettingsFactory.createCacheProvider(SettingsFactory.java:358)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:232)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216)

 

原因:少了ehcache.jar

 

3. iterate(), list()

Hibernate3 取消 2中的Session 中 find()、iterate() 方法,find()必須使用Session的createQuery()建立Query實例,並使用list()方法來取代。terate()被取消了,由Query介面上的iterator()來取代,詳請看 Query.list()、iterator()。

 

遇到一个很奇怪的问题,Hibernate3中iterate()属性为空

Iterator it = db().createQuery("from Book").iterate();
while (it.hasNext()) {
    Object o = it.next(); //在IDEA中的调试窗口中看到的对像的属性值竞然为空(试了下hibernate2:db().iterate("from Book")却正常的),但如果强制类型转换后,System.println(((Book)o).getName());却是有值的
    ...
    }
}

 

但如果是list()方法,则是正常的

List list = db().createQuery(query).list();
for (int i = 0; i < list.size(); i++) {
    Object o =  list.get(i);
    ...
}

 

4. 批量删除

Hibernate2:

    sessionFactory.openSession().delete("from Book");

Hibernate3:

    sessionFactory.createQuery("delete from Book").executeUpdate();

 

5. 批量更新

Hibernate2:

    for (...) {

        Book book = sessionFactory.openSession().load(id);

        sessionFactory.openSession().delete(book);

    }

 

Hibernate3:

    sessionFactory.createQuery("update Book b set b.price = b.price + 1 where b.price < 20").executeUpdate();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值