Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7612794 建立时间:2006年5月29日 |

| |
[Hibernate]浅谈Hibernate的flush机制 软件技术
lhwork 发表于 2007/1/19 11:52:29 |
随着Hibernate在Java开发中的广泛应用,我们在使用Hibernate进行对象持久化操作中也遇到了各种各样的问题。这些问题往往都是我们对Hibernate缺乏了解所致,这里我讲个我从前遇到的问题及一些想法,希望能给大家一点借鉴。 这是在一次事务提交时遇到的异常。 an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) net.sf.hibernate.AssertionFailure:& |
|
[Hibernate]Hibernate之多次映射同一个类 软件技术
lhwork 发表于 2007/1/19 9:45:52 |
假设一个博客系统中有一个表用来存储所有的文章,这个表中用一个大文本字段来存储文章的内容。当我们在显示其中一篇文章时,我们需要加载该文章的每一个字段的值。但是另外一种情况,我们仅仅需要列出最新发表的十篇文章,而且仅仅是为了在页面上显示其标题和链接的时候,我们就不希望程序去读取存储文章内容的字段,为什么呢?你不妨做一个测试,同样一个查询,读取大文本字段和不读取大文本字段的性能可能差别是三倍以上。因此为了提升应用性能,我们在显示最新文章列表的时候不想去读取文章的内容字段。但是Hibernate的做法不管你要不要都会把所有的字段读出并映射到bean类相对应的属性中。
我之前有一篇文章在介绍这个解决办法的时候采取的是添加另外一个类,然后在bean的配置文件中把文章内容的字段删掉,这样当我要显示不包含内容的文章列表,我的查询就可以直接针对新增的这个类,我们姑且称这种方法为方法一。
其实还有另外一种做法,那就是利用Hibernate的多次映射同一个类的方法,我们称为方法二。
这个方法与我之前的方法比较不同的在于没有必要再新增另外的类,也就是说对同 |
|
[Hibernate]关于类继承在Hibernate的问题 软件技术
lhwork 发表于 2007/1/19 9:43:34 |
今天碰到一个这样的问题:
有一个表包含了一个大文本字段,查询时候发现有没有带大文本字段执行的速度相差3-5倍,于是想着使用两个类同时映射到同一张表,假设这两个类分别是A、B,A中除了不包含大文本字段外,其他字段都包含;B直接继承A类并增加大文本字段。
分别编写两个映射文件,这样如果我需要大文本字段的内容的查询就用B进行查询,不需要大文本字段内容的查询就用A进行查许。
但是在实际运行中发现,对A进行查询的时候,Hibernate发出了两条SQL语句,一条是对A进行查询,另外一条对B查询。很是纳闷,这样一来不仅性能没有提升反倒而下降。
经过试验找到了解决的办法:
再增加一个类名为Base类,把A中所有属性以及方法搬到Base类来,A extends Base,同时B extends Base,映射文件无需改动,Base不做任何映射! 问题解决!
以后实际应用在使用到大字段的时候都小心谨慎,毕竟性能的差距很大,大家不妨试验一 |
|
[Hibernate]如何操作Hibernate配置中定义的缓存 软件技术
lhwork 发表于 2007/1/19 8:52:12 |
Hibernate通过配置项 hibernate.cache.provider_class 来指定所采用的Cache API,但是在Hibernate所提供对缓存操作方法都是一些高层的API,也就是说Hibernate提供对缓存的操作方法都是基于对象的操作,例如
session.evict(Object obj); SessionFactory.evictXxxx
但有时候这些方法并不能完成我们想要的功能时,因此我们需要直接操控缓存来达到我们想要的目的。
挨个打开Hibernate的源代码发现了有一个类Settings,这个类有一个getCacheProvider方法,而通过SessionFactoryImpl类可以获取Settings的实例。从字面上来可以猜出SessionFactoryImpl就是 |
|
[Hibernate]使用MiddleGen 产生hibernate的数据库表映射文件 软件技术
lhwork 发表于 2007/1/7 14:10:28 |
虽然myEclipse也可以生成,但是这种方式也看一下...也还是不错的..
这是以前看到的。贴上来..
来源:不详
1:下载Middlegen-Hibernate-r5 地址:URL http://voxel.dl.sourceforge.net/sourceforge/hibernate/Middlegen-Hibernate-r5.zip 2:解压缩 将下载的解压缩,如 D:\Middlegen-Hibernate-r5 3:配置数据库文件 进入D:\Middlegen-Hibernate-r5 目录下的\config\database 子目录,选择你要得数据库文件,我使用的是mysql. 将原来的 <property name="database.driver.file" &nb |
|
[Hibernate]hibernate调用mysql5.0存储过程小记 软件技术
lhwork 发表于 2007/1/7 14:09:29 |
准备工作: 1.hibernate3 到这下载hibernate3:http://sourceforge.net/project/showfiles.phpgroup_id=40712&package_id=127784&release_id=403223 2.mysql (注意一定要用mysql5.0和最新驱动) mysql官方网站http://www.mysql.com/
| |
[Hibernate]hibernate继承---联合子类 已更新(六) 软件技术
lhwork 发表于 2007/1/7 14:08:23 |
这篇和上一篇http://www.blogjava.net/wujun/archive/2006/04/11/40527.html 不同的地方在于配置文件上。 上一篇采用的是joined-subclass
先看先看由满江红翻译团队(RedSaga Translate Team)翻译的联合子类说明..
<union-subclass name="ClassName" (1) tab |
|
[Hibernate]hibernate继承-joined-subclass 已更新(五) 软件技术
lhwork 发表于 2007/1/7 14:07:46 |
还是和前面一样。。先看先看由满江红翻译团队(RedSaga Translate Team)翻译的配置说明
每个子类可能被映射到他自己的表中(每个子类一个表的策略)。被继承的状态通过和超类的表关联得到。我们使用<joined-subclass>元素。
<joined-subclass name="ClassName" (1) table="tablename" (2) proxy="ProxyInterface" (3) lazy=" |
|
[Hibernate]hibernate继承之---subclass 已更新(四) 软件技术
lhwork 发表于 2007/1/7 14:06:52 |
先看由满江红翻译团队(RedSaga Translate Team)翻译的子类(subclass)说明,再来看我们的例子 多态持久化需要为父类的每个子类都进行定义。对于“每一棵类继承树对应一个表”的策略来说,就需要使用<subclass>定义。
<subclass name="ClassName" (1) discriminator-value="discriminator_value" (2) proxy="ProxyInterface" (3) |
|
|