三、业务逻辑层, 四、显示层
这两个就不说了。
下面给出 hibernate.cfg.xml 配置文件的内容:
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
最后,附带的提一个在 NHibernate-1.2.0.GA 版本中遇见的问题。
如果使用 NHibernate-1.2.0.GA,持久类的属性需要加 virtual 的问题。
如果不加,就会报这个错误: method get_(属性或是方法名称) should be virtual。
由于NHibernate 1.2.0 默认对类用了延迟加载,所以需要要给属性或是方法名称加上 virtual。
另外,我搜索到了一篇 blog (见参考资料7),给出了一段英文解释!试着翻译一下,或者大家直接看原文!
1. 你可能要遵循异常建议,并给你所有的属性加上virtual,这样确保你的类是非密封的(non-sealed)。很明显,如果你认为你想要利用延迟加载代理的特点,你应该这样做。可是,假如你有一个可继承的基类,或者可能仅仅是它困绕着你:一个“透明”的持久层框架规定了你如何设计你的有价值的类的某些方面。那么第二项和第三项选择就来了。它们两个涉及到改变支持旧的行为。
2.针对某一个特定的类改变延迟加载代理设置,你可能要在<class>映射元素中mapping增加一个lazy='false'的属性。这可能看起来象下面的设置:
<class
name="NorthwindClasses.Category, NorthwindClasses"
table="Categories"
lazy="false"
>
3. 为了在一个特定的映射文件中为所有的类改变延迟加载代理设置,你可能要增加<hibernate-mapping>元素中增加一个lazy='false'的属性,如下:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-lazy="false">
不幸的是,如果你的每一个类对应一个<hibernate-mapping>文件,这类实践是我个人遵循和推荐的,那么选择三可能并不能真正地帮助你太多。 虽然太糟糕了,但是看起来似乎没有任何办法在 <nhibernate> 的全局配置中设置这个默认值。但是如果你恰好遇见你的所有类都在一个 .hbm.xml 文件里,"default-lazy"属性可以帮助你解决困难。
5月17号补充: Cheney 在评论中说在配置文件中加上下面的设置可解决这个问题.也就是说我不想利用延迟加载代理的特点.:)
<property name="use_proxy_validator">false</property>
谢谢指点!
我在论坛上又查到了一个 Hibernate Team 的 sergey 说了下面一段话: 不要禁用验证.要么将成员声明为 virtual,要么在将出错的类的延迟加载设置为 false. 只有不要报告任何错误才禁用验证.原话: Don't disable the validation. Either declare the members virtual, or set lazy="false" for the failing class. Disable the validation only after it doesn't report any errors.
全文结束!
2007 年 6月6号 补充:
我还是提供一个简单的解决方案的源代码下载吧!虽然三部分加两个补充部分说了很多,但是有解决方案的源代码更清晰一些!
下载地址