初探hibernate

org.hibernate.SharedSessionContract
    
    方法共享在Session与StatelessSession之间的契约。
    
org.hibernate.Session
    
    运行时在java应用和hibernate之间的借口,是核心API类抽象概念持久性服务。
    Session生命周期是由开始到结束逻辑事务(长事务可能跨越多个数据库事务)。
    Session的主要功能是提供create,read和remove操作为映射实体类的实例,这些实例可能存在如下3种状态之一:
        transient:从不持久,不需要任何Session关联。
        persistent:使用一个唯一的Session关联。
        detached:预先持久,不需要任何Session关联。
    transient的实例可以调用save(),persist()or saveOrUpdate()成为persistent。
    persistent实例可以调用delete()成为transient。
    任何调用get()or load()返回的实例是persistent。
    detached实例可以通过调用update()、saveOrUpdate()、lock()or replicate()成为persistent。
    transient和detached实例状态可以通过调用merge()作为一个新的persistent实例成为persistent。
    
    它并不刻意实现是线程安全的。反而每个线程/事务应该从SessionFactory获取自己的实例。
    若Session的持久化类是可序列化则该Session的实例是可序列化的。
    通常一个事务使用如下:
        Session sess = factory.openSession();
        Transaction tx;
        try {
            tx = sess.beginTransaction();
            //do some work
            ...
            tx.commit();
        }catch (Exception e) {
            if (tx!=null) tx.rollback();
            throw e;
        } finally {
            sess.close();
        }
    如果Session抛出异常,这个事务被回滚并且session被丢弃,Session内部状态可能和数据库异常发生后不一致。
    
org.hibernate.Criteria

    一个简化API为检索实体通过组成条件对象,这是非常方便的方法类似于搜索屏幕上可变的条件被放置在结果集。
    Session是其factory,Criterion实例通常通过Restrictions上的一个工厂方法获得:
        List cats = session.createCriteria(Cat.class)
            .add( Restrictions.like("name", "Iz%") )
            .add( Restrictions.gt( "weight", new Float(minWeight) ) )
            .addOrder( Order.asc("age") )
            .list();
    
    可以导航关联使用createAlias() or createCriteria()。
        List cats = session.createCriteria(Cat.class)
            .createCriteria("kittens")
                .add( Restrictions.like("name", "Iz%") )
            .list();
            
        List cats = session.createCriteria(Cat.class)
            .createAlias("kittens","kit")
                .add( Restrictions.like("kit.name", "Iz%") )
            .list();    
    
    可以指定projection和aggregation使用Projection实例获得,通过使用Projection的工厂方法:
        List cats = session.createCriteria(Cat.class)
            .setProjection( Projections.projectionList()
                .add( Projections.rowCount() )
                .add( Projections.avg("weight") )
                .add( Projections.max("weight") )
                .add( Projections.min("weight") )
                .add( Projections.groupProperty("color") )
            )
            .addOrder( Order.asc("color") )
            .list();

你可能感兴趣的:(初探hibernate)