返回列表 发帖

[轻量级Java EE] 关于“简单工作流系统”中的一个Hibernate映射文件的疑惑

776页的Application.hbm.xml中的倒数第三行:<one-to-one name="check" property-ref="app"/>
  感觉是不是差个class元素阿?也就是说是否应该写为:<one-to-one name="check" property-ref="app" class="CheckBack"/>

  书中提到Hibernate使用CGLIB来生成代理,这个CGLIB是做什么的?好像从来没有听说过?

提问赏金:10金币
获奖名单 : crazyit(10金币)    

cglib用来继承类或实现接口以产生对象。
源自cglib官网http://cglib.sourceforge.net/的summary。

hibernate用到了注解技术,它是从元数据如何在早期java版本中使用属性文件的原理逐渐发展为今日的注解。
处理注解的三种方式:生成器、字节码转换、运行时反射。

字节码转换:注解处理器对带有注解的类字节码文件进行解析,对其做一些适当的修改,再重新编译并生成新的对象,也能生成其他类型文件(如xml)。字节码转换器在编译期(离线状态)、装载期都能运行,还能在运行时动态转换,且在字节码文件或runtime这样的保持策略下也可运行。

利用cglib产生新对象会提高字节码转换的效率,二者有一定的依存关系。
2

评分人数

TOP

原帖由 asst2003 于 2010-3-27 16:54 发表
776页的Application.hbm.xml中的倒数第三行:
  感觉是不是差个class元素阿?也就是说是否应该写为:

  书中提到Hibernate使用CGLIB来生成代理,这个CGLIB是做什么的?好像从来没有听说过? ...


如下写法是正确的,这是“基于外键的双向1-1关联
  1. <one-to-one name="check" property-ref="app"/>
复制代码
在站长很早以前的写的一书《整合struts+hibernate+spring应用开发详解》第 195页最上面,就有详细说明

CheckBack.hbm.xml文件中,有如下写法
(在存放外键的一端,放many-to-one元素)
  1. <many-to-one name="app" column="app_id" not-null="true" unique="true" lazy="false"/>
复制代码
Applicaton.hbm.xml文件中,有如下写法
  1. <one-to-one name="check" property-ref="app"/>
复制代码
property-ref是引关联类CheckBack.java中的app属性

[ 本帖最后由 crazyit 于 2010-3-29 22:52 编辑 ]
2

评分人数

成功的人不是赢在起点,而是赢在转折点!

TOP

CGLIB(大概是Code Generator lib的意思,具体可能记错。)是个非常重要的工具库,
它的功能类似于JDK反射中的动态代理。

简单地说,CGLIB它也会在运行时动态地生成类——以前我们需要一个类,总是先写一个java文件,再编译,
但CGLIB将直接在内存动态地生成某个类定义。

CGLIB在很多框架中都用重要的作用,不过归纳起来它的应用场景主要就是代理模式——包括hibernate的延迟加载,其实就是典型的代理模式。
生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

TOP

简单工作流系统我导入eclipse,运行不了
如果直接放在tomcat下运行是可以的,就是classes的位置不一样,不知怎么解决,我也试过移动classes文件的相对位置

TOP

返回列表