发布新日志

  • Query接口

    2009-06-16 11:52:53

    1、如果把hibernate从mysql移植到Oracle上因为关键字冲突,怎么处理?
    比如原先有一个表名叫User,在Oracle里是关键字不能使用,但是因为系统已经在使用,所以也不能修改表名,怎么处理?
    答:在.hbm.xml文件里这样配置
    <hibernate-mapping>
        <class name="com.kursk.hbm.User" table="`User" schema="STUDY">
    ...................................................
    </hibernate-mapping>
    用反引号(键盘1左边的按键)来处理
     
    2、Query接口
    2.1 如果肯定查询的结果只有一条记录,使用Query.uniqueResult()方法;
    2.2 可以通过给Hql里的查询条件命名的办法,来简化HQL,比如
    String name=...
    String id=....
    String hql="from User as user where user.name=:name and user.id=:id";
    Query query=s.createQuery(hql);
    query.setString(name,name);
    query.setString(id,id);
    ....................
    2.3 分页。HIbernate将多种类型的数据库使用下面两个方法来处理
    setFirstResult() 从哪一条记录开始
    setMaxResult()   取多少条记录
    那么hibernate是怎么知道是哪种类型的数据库呢——通过hibernate.cfg.xml的dialect(方言)这个配置项
     
    3、Hql也是一门语言,学习成本很大,建议边使用边学习;
     
    4、小技巧,hibernate.cfg.xml配置项的值可以省略“hibernate”这个开头。
     
    4、
  • Hibernate对象的状态

    2009-06-16 08:49:28

    2、hibernate对象的三种状态
    详细解释见视频第5课--实体对象的三种状态与saveOrUpdate方法
    【1】瞬时(transient)
    【2】持久(persistent)
    【3】脱管(detached)

    在持久状态的对象发生变化时,hibernate都能发现并且将持久层对象的改变传递到数据库的记录。
    但是,为了减少持久层对象和数据库的交互,直到commit时才提交改变到数据库。

    脱管对象因为没有处在hibernate的监听下,所以对象改变不会影响数据库记录的改变。

     

Open Toolbar