• J2EE进阶(九)org


    在web.xml中加入

    
         hibernateFilter
         
         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
         
    
         hibernateFilter
         *.do
    
    

    3.我用的方法,也是我认为比较不错的方法,灵活性更好。用left join fetch或inner join fetch语法。

    例如:from Item i left join fetch i.parentItem ii

    解释一下Item表是一个自关联的表,它的关联关系在hbm.xml中配置好了。

    如下:

    
    
    
    

    在Item类中

    private Item parentItem;

    利用left join fetch可以完美的解决这个问题。

    关于lazy机制

    延迟初始化错误是运用Hibernate开发项目时最常见的错误。如果对一个类或者集合配置了延迟检索策略,那么必须当代理类实例或代理集合处于持久化状态(即处于Session范围内)时,才能初始化它。如果在游离状态时才初始化它,就会产生延迟初始化错误。

    下面把Customer.hbm.xml文件的元素的lazy属性设为true,表示使用延迟检索策略:

    当执行Session的load()方法时,Hibernate不会立即执行查询CUSTOMERS表的select语句,仅仅返回Customer类的代理类的实例,这个代理类具由以下特征:

    (1)由Hibernate在运行时动态生成,它扩展了Customer类,因此它继承了Customer类的所有属性和方法,但它的实现对于应用程序是透明的。

    (2)当Hibernate创建Customer代理类实例时,仅仅初始化了它的OID属性,其他属性都为null,因此这个代理类实例占用的内存很少。

    (3)当应用程序第一次访问Customer代理类实例时(例如调用customer.getXXX()或customer.setXXX()方法), Hibernate会初始化代理类实例,在初始化过程中执行select语句,真正从数据库中加载Customer对象的所有数据。但有个例外,那就是当应用程序访问Customer代理类实例的getId()方法时,Hibernate不会初始化代理类实例,因为在创建代理类实例时OID就存在了,不必到数据库中去查询。

    提示:Hibernate采用CGLIB工具来生成持久化类的代理类。CGLIB是一个功能强大的Java字节码生成工具,它能够在程序运行时动态生成扩展 Java类或者实现Java接口的代理类。关于CGLIB的更多知识,请参考:http://cglib.sourceforge.net/

    以下代码先通过Session的load()方法加载Customer对象,然后访问它的name属性:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    customer.getName();
    tx.commit();
    

    在运行session.load()方法时Hibernate不执行任何select语句,仅仅返回Customer类的代理类的实例,它的OID为1,这是由load()方法的第二个参数指定的。当应用程序调用customer.getName()方法时,Hibernate会初始化Customer代理类实例,从数据库中加载Customer对象的数据,执行以下select语句:

    select * from CUSTOMERS where ID=1;
    select * from orDERS where CUSTOMER_ID=1;
    

    当元素的lazy属性为true,会影响Session的load()方法的各种运行时行为,下面举例说明。

    1.如果加载的Customer对象在数据库中不存在,Session的load()方法不会抛出异常,只有当运行customer.getName()方法时才会抛出以下异常:

    ERROR LazyInitializer:63 -Exception initializing proxy net.sf.hibernate.ObjectNotFoundException: No row with thegiven identifier exists: 1, of class: mypack.Customer

    2.如果在整个Session范围内,应用程序没有访问过Customer对象,那么Customer代理类的实例一直不会被初始化,Hibernate不会执行任何select语句。以下代码试图在关闭Session后访问Customer游离对象:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    tx.commit();
    session.close();
    customer.getName();
    

    由于引用变量customer引用的Customer代理类的实例在Session范围内始终没有被初始化,因此在执行customer.getName()方法时,Hibernate会抛出以下异常:

    ERROR LazyInitializer:63 -Exception initializing proxy net.sf.hibernate.HibernateException: Could not initialize proxy-the owning Session was closed

    由此可见,Customer代理类的实例只有在当前Session范围内才能被初始化。

    3.net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显式初始化代理类实例,isInitialized()方法用于判断代理类实例是否已经被初始化。例如:

    tx = session.beginTransaction();
    Customer customer=(Customer)session.load(Customer.class,new Long(1));
    if(!Hibernate.isInitialized(customer))
    
    
    ### 最后
    
    中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。
    
    *   技术要深入到什么程度?
    
    *   做久了技术总要转型管理?
    
    *   我能做什么,我想做什么?
    
    *   **一技之长,就是深耕你的专业技能,你的专业技术。**(重点)
    
    *   独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)
    
    *   拥有事业,选择一份使命,带领团队实现它。(创业)
    
    **一技之长分五个层次**
    
    *   栈内技术 - 是指你的前端专业领域技术
    
    *   栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识
    
    *   工程经验 - 是建设专业技术体系的“解决方案”
    
    *   带人做事 - 是对团队协作能力的要求
    
    *   业界发声 - 工作经验总结对外分享,与他人交流
    
    
    
    > 永远不要放弃一技之长,它值得你长期`信仰持有`。
    
    
    
    > 主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue 等等。
    
    ![](https://img-blog.csdnimg.cn/img_convert/44bc3d1e2743a7cf1e94e28026aedf8d.png)
    
  • 相关阅读:
    GitLab的个人仓库转移到团队仓库
    java毕业设计在线教育平台Mybatis+系统+数据库+调试部署
    Python接口自动化测试 —— Selenium+pytest+数据驱动
    Linux安装GitLab的两种方式(SSH和Docker)
    【智慧工地源码】基于AI视觉技术赋能智慧工地
    MySQL筑基篇之增删改查
    x64 番外篇——保护模式相关
    最长回文子串(Longest Palindromic substring)
    业务:财务软件之会计六要素
    快速构建后台管理系统-RUOYI学习之-VUE
  • 原文地址:https://blog.csdn.net/2401_85124719/article/details/139625532