﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kylixlu-随笔分类-Hibernate</title><link>http://www.blogjava.net/kylixlu/category/28324.html</link><description>君子素其位而行，不愿乎其外。</description><language>zh-cn</language><lastBuildDate>Sun, 07 Feb 2010 01:04:05 GMT</lastBuildDate><pubDate>Sun, 07 Feb 2010 01:04:05 GMT</pubDate><ttl>60</ttl><item><title>Spring配置中遇到的错误</title><link>http://www.blogjava.net/kylixlu/archive/2010/01/28/311146.html</link><dc:creator>kylixlu</dc:creator><author>kylixlu</author><pubDate>Thu, 28 Jan 2010 14:43:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2010/01/28/311146.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/311146.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2010/01/28/311146.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/311146.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/311146.html</trackback:ping><description><![CDATA[1.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">org.springframework.beans.factory.BeanCreationException:&nbsp;Error&nbsp;creating&nbsp;bean&nbsp;with&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;defined&nbsp;in&nbsp;ServletContext&nbsp;resource&nbsp;[</span><span style="color: #000000">/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">config</span><span style="color: #000000">/</span><span style="color: #000000">spring</span><span style="color: #000000">/</span><span style="color: #000000">applicationContext.xml]:&nbsp;Instantiation&nbsp;of&nbsp;bean&nbsp;failed;&nbsp;nested&nbsp;exception&nbsp;is&nbsp;org.springframework.beans.BeanInstantiationException:&nbsp;Could&nbsp;not&nbsp;instantiate&nbsp;bean&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;[org.springframework.orm.hibernate3.LocalSessionFactoryBean]:&nbsp;Constructor&nbsp;threw&nbsp;exception;&nbsp;nested&nbsp;exception&nbsp;is&nbsp;java.lang.NoClassDefFoundError:&nbsp;org</span><span style="color: #000000">/</span><span style="color: #000000">dom4j</span><span style="color: #000000">/</span><span style="color: #000000">DocumentException</span></div>
解决方法：添加dom4j.jar<br />
<br />
2.<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">org.springframework.beans.factory.BeanCreationException:&nbsp;Error&nbsp;creating&nbsp;bean&nbsp;with&nbsp;name&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">sessionFactory</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;defined&nbsp;in&nbsp;ServletContext&nbsp;resource&nbsp;[</span><span style="color: #000000">/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">config</span><span style="color: #000000">/</span><span style="color: #000000">spring</span><span style="color: #000000">/</span><span style="color: #000000">applicationContext.xml]:&nbsp;Initialization&nbsp;of&nbsp;bean&nbsp;failed;&nbsp;nested&nbsp;exception&nbsp;is&nbsp;java.lang.NoClassDefFoundError:&nbsp;javax</span><span style="color: #000000">/</span><span style="color: #000000">transaction</span><span style="color: #000000">/</span><span style="color: #000000">TransactionManager</span></div>
解决方法:&nbsp; 添加jta.jar<br />
<br />
<img src ="http://www.blogjava.net/kylixlu/aggbug/311146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">kylixlu</a> 2010-01-28 22:43 <a href="http://www.blogjava.net/kylixlu/archive/2010/01/28/311146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate中所有包作用详细讲解</title><link>http://www.blogjava.net/kylixlu/archive/2008/02/05/179352.html</link><dc:creator>kylixlu</dc:creator><author>kylixlu</author><pubDate>Tue, 05 Feb 2008 10:57:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2008/02/05/179352.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/179352.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2008/02/05/179352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/179352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/179352.html</trackback:ping><description><![CDATA[<p><font face="Times New Roman">Hibernate一共包括了23个jar包，令人眼花缭乱。本文将详细讲解Hibernate每个jar包的作用，便于你在应用中根据自己的需要进行取舍。</font></p>
<p><font face="Times New Roman">　　下载Hibernate，例如2.0.3稳定版本，解压缩，可以看到一个hibernate2.jar和lib目录下有22个jar包：</font></p>
<p><font face="Times New Roman">　　hibernate2.jar:</font></p>
<p><font face="Times New Roman">　　Hibernate的库，没有什么可说的，必须使用的jar包</font></p>
<p><font face="Times New Roman">　　cglib-asm.jar:</font></p>
<p><font face="Times New Roman">　　CGLIB库，Hibernate用它来实现PO字节码的动态生成，非常核心的库，必须使用的jar包</font></p>
<p><font face="Times New Roman">　　dom4j.jar:</font></p>
<p><font face="Times New Roman">　　dom4j是一个Java的XML
API，类似于jdom，用来读写XML文件的。dom4j是一个非常非常优秀的Java XML
API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件，可以在SourceForge上找到它。在IBM
developerWorks上面可以找到一篇文章，对主流的Java XML
API进行的性能、功能和易用性的评测，dom4j无论在那个方面都是非常出色的。我早在将近两年之前就开始使用dom4j，直到现在。如今你可以看到越
来越多的Java软件都在使用dom4j来读写XML，特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包，
Hibernate用它来读写配置文件。</font></p>
<p><font face="Times New Roman">　　odmg.jar:</font></p>
<p><font face="Times New Roman">　　ODMG是一个ORM的规范，Hibernate实现了ODMG规范，这是一个核心的库，必须使用的jar包。</font></p>
<p><font face="Times New Roman">　　commons-collections.jar：</font></p>
<p><font face="Times New Roman">　　Apache Commons包中的一个，包含了一些Apache开发的集合类，功能比java.util.*强大。必须使用的jar包。</font></p>
<p><font face="Times New Roman">　　commons-beanutils.jar：</font></p>
<p><font face="Times New Roman">　　Apache Commons包中的一个，包含了一些Bean工具类类。必须使用的jar包。</font></p>
<p><font face="Times New Roman">　　commons-lang.jar:</font></p>
<p><font face="Times New Roman">　　Apache Commons包中的一个，包含了一些数据类型工具类，是java.lang.*的扩展。必须使用的jar包。</font></p>
<p><font face="Times New Roman">　　commons-logging.jar:</font></p>
<p><font face="Times New Roman">　　Apache
Commons包中的一个，包含了日志功能，必须使用的jar包。这个包本身包含了一个Simple
Logger，但是功能很弱。在运行的时候它会先在CLASSPATH找log4j，如果有，就使用log4j，如果没有，就找JDK1.4带的
java.util.logging，如果也找不到就用Simple
Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾，当初Apache极力游说Sun把log4j加入JDK1.4，
然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了，因此拒绝了Apache的要求，使用自己的java.util.logging，这个包
的功能比log4j差的很远，性能也一般。后来Apache就开发出来了commons-logging.jar用来兼容两个logger。因此用
commons-logging.jar写的log程序，底层的Logger是可以切换的，你可以选择log4j，java.util.logging或
者它自带的Simple
Logger。不过我仍然强烈建议使用log4j，因为log4j性能很高，log输出信息时间几乎等于System.out，而处理一条log平均只需
要5us。你可以在Hibernate的src目录下找到Hibernate已经为你准备好了的log4j的配置文件，你只需要到Apache
网站去下载log4j就可以了。commons-logging.jar也是必须的jar包。</font></p>
<p><font face="Times New Roman">　　使用Hibernate必须的jar包就是以上的这几个，剩下的都是可选的。</font></p>
<p><font face="Times New Roman">　　ant.jar:</font></p>
<p><font face="Times New Roman">　　Ant编译工具的jar包，用来编译Hibernate源代码的。如果你不准备修改和编译Hibernate源代码，那么就没有什么用，可选的jar包</font></p>
<p><font face="Times New Roman">　　optional.jar：</font></p>
<p><font face="Times New Roman">　　Ant的一个辅助包。</font></p>
<p><font face="Times New Roman">　　c3p0.jar：</font></p>
<p><font face="Times New Roman">　　C3PO是一个数据库连接池，Hibernate可以配置为使用C3PO连接池。如果你准备用这个连接池，就需要这个jar包。</font></p>
<p><font face="Times New Roman">　　proxool.jar：</font></p>
<p><font face="Times New Roman">　　也是一个连接池，同上。</font></p>
<p><font face="Times New Roman">　　commons-pool.jar, commons-dbcp.jar:</font></p>
<p><font face="Times New Roman">　　DBCP数据库连接池，Apache的Jakarta组织开发的，Tomcat4的连接池也是DBCP。</font></p>
<p><font face="Times New Roman">　　实际上Hibernate自己也实现了一个非常非常简单的数据库连接池，加上上面
3个，你实际上可以在Hibernate上选择4种不同的数据库连接池，选择哪一个看个人的偏好，不过DBCP可能更通用一些。另外强调一点，如果在
EJB中使用Hibernate，一定要用App Server的连接池，不要用以上4种连接池，否则容器管理事务不起作用。</font></p>
<p><font face="Times New Roman">　　connector.jar:</font></p>
<p><font face="Times New Roman">　　JCA 规范，如果你在App Server上把Hibernate配置为Connector的话，就需要这个jar。不过实际上一般App Server肯定会带上这个包，所以实际上是多余的包。</font></p>
<p><font face="Times New Roman">　　jaas.jar:</font></p>
<p><font face="Times New Roman">　　JAAS是用来进行权限验证的，已经包含在JDK1.4里面了。所以实际上是多余的包。</font></p>
<p><font face="Times New Roman">　　jcs.jar：</font></p>
<p><font face="Times New Roman">　　如果你准备在Hibernate中使用JCS的话，那么必须包括它，否则就不用。</font></p>
<p><font face="Times New Roman">　　JDBC2_0-stdext.jar:</font></p>
<p><font face="Times New Roman">　　JDBC2.0的扩展包，一般来说数据库连接池会用上它。不过App Server都会带上，所以也是多余的。</font></p>
<p><font face="Times New Roman">　　jta.jar：</font></p>
<p><font face="Times New Roman">　　JTA规范，当Hibernate使用JTA的时候需要，不过App Server都会带上，所以也是多余的。</font></p>
<p><font face="Times New Roman">　　junit.jar:</font></p>
<p><font face="Times New Roman">　　Junit包，当你运行Hibernate自带的测试代码的时候需要，否则就不用。</font></p>
<p><font face="Times New Roman">　　xalan.jar, xerces.jar, xml-apis.jar:</font></p>
<p><font face="Times New Roman">　　Xerces是XML解析器，Xalan是格式化器，xml-apis实际上是
JAXP。一般App
Server都会带上，JDK1.4也包含了解析器，不过不是Xerces，是Crimson，效率比较差，不过Hibernate用XML只不过是读取
配置文件，性能没什么紧要的，所以也是多余的。</font></p>
<img src ="http://www.blogjava.net/kylixlu/aggbug/179352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">kylixlu</a> 2008-02-05 18:57 <a href="http://www.blogjava.net/kylixlu/archive/2008/02/05/179352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate主键生成方式</title><link>http://www.blogjava.net/kylixlu/archive/2007/12/27/170990.html</link><dc:creator>kylixlu</dc:creator><author>kylixlu</author><pubDate>Thu, 27 Dec 2007 13:12:00 GMT</pubDate><guid>http://www.blogjava.net/kylixlu/archive/2007/12/27/170990.html</guid><wfw:comment>http://www.blogjava.net/kylixlu/comments/170990.html</wfw:comment><comments>http://www.blogjava.net/kylixlu/archive/2007/12/27/170990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kylixlu/comments/commentRss/170990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kylixlu/services/trackbacks/170990.html</trackback:ping><description><![CDATA[<div class="postbody">Key Generator<br />
主键产生器<br />
可选项说明：<br />
1) assigned<br />
主键由外部程序负责生成，无需Hibernate参与。<br />
<br />
2) hilo<br />
通过hi/lo 算法实现的主键生成机制，需要额外的数据库表保存主<br />
键生成历史状态。<br />
<br />
3) seqhilo<br />
与hilo 类似，通过hi/lo 算法实现的主键生成机制，只是主键历史<br />
状态保存在Sequence中，适用于支持Sequence的数据库，如Oracle。<br />
<br />
4) increment<br />
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持<br />
一个变量，以保存着当前的最大值，之后每次需要生成主键的时候<br />
将此值加1作为主键。<br />
这种方式可能产生的问题是：如果当前有多个实例访问同一个数据<br />
库，那么由于各个实例各自维护主键状态，不同实例可能生成同样<br />
的主键，从而造成主键重复异常。因此，如果同一数据库有多个实<br />
例访问，此方式必须避免使用。<br />
<br />
5) identity<br />
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL<br />
中的主键生成机制。<br />
<br />
6) sequence<br />
采用数据库提供的sequence 机制生成主键。如Oralce 中的<br />
Sequence。<br />
<br />
7) native<br />
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence<br />
其中一种作为主键生成方式。<br />
<br />
8) uuid.hex<br />
由Hibernate基于128 位唯一值产生算法生成16 进制数值（编码后<br />
以长度32 的字符串表示）作为主键。<br />
<br />
9) uuid.string<br />
与uuid.hex 类似，只是生成的主键未进行编码（长度16）。在某些<br />
数据库中可能出现问题（如PostgreSQL）。<br />
<br />
10) foreign<br />
使用外部表的字段作为主键。<br />
一般而言，利用uuid.hex方式生成主键将提供最好的性能和数据库平台适<br />
应性。<br />
<br />
另外由于常用的数据库，如Oracle、DB2、SQLServer、MySql 等，都提<br />
供了易用的主键生成机制（Auto-Increase 字段或者Sequence）。我们可以在数<br />
据库提供的主键生成机制上，采用generator-class=native的主键生成方式。<br />
不过值得注意的是，一些数据库提供的主键生成机制在效率上未必最佳，<br />
大量并发insert数据时可能会引起表之间的互锁。<br />
数据库提供的主键生成机制，往往是通过在一个内部表中保存当前主键状<br />
态（如对于自增型主键而言，此内部表中就维护着当前的最大值和递增量），<br />
之后每次插入数据会读取这个最大值，然后加上递增量作为新记录的主键，之<br />
后再把这个新的最大值更新回内部表中，这样，一次Insert操作可能导致数据<br />
库内部多次表读写操作，同时伴随的还有数据的加锁解锁操作，这对性能产生<br />
了较大影响。<br />
因此，对于并发Insert要求较高的系统，推荐采用uuid.hex 作为主键生成<br />
机制。</div>
<img src ="http://www.blogjava.net/kylixlu/aggbug/170990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kylixlu/" target="_blank">kylixlu</a> 2007-12-27 21:12 <a href="http://www.blogjava.net/kylixlu/archive/2007/12/27/170990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>