博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
初探hibernate
阅读量:5954 次
发布时间:2019-06-19

本文共 2008 字,大约阅读时间需要 6 分钟。

  hot3.png

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

转载于:https://my.oschina.net/rksi5/blog/262639

你可能感兴趣的文章
PMP考试冲刺进行中。。。
查看>>
大换血的代价
查看>>
Learn in FCC(3)
查看>>
RunLoop--
查看>>
chrome 2行换行省略号 ... text-ellipse
查看>>
C语言第四次作业
查看>>
Java学习-集合的理解
查看>>
iOS验证码倒计时(GCD实现)
查看>>
iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)
查看>>
canvas和svg
查看>>
结对:复利美化版
查看>>
HDU_2689_Sort it
查看>>
urllib模块使用笔记
查看>>
mysql 连接慢的问题(超过了1秒)
查看>>
Linux嵌入式GDB调试环境搭建
查看>>
java分析jvm常用指令
查看>>
【Linux】Linux 在线安装yum
查看>>
oracle 管理操作 (转)
查看>>
DEV 等待窗口
查看>>
实验03博客园总结
查看>>