﻿<?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-狼爱上狸-随笔分类-Hibernate</title><link>http://www.blogjava.net/waterjava/category/16551.html</link><description>闻道有先后  术业有专攻</description><language>zh-cn</language><lastBuildDate>Thu, 01 Mar 2007 15:35:41 GMT</lastBuildDate><pubDate>Thu, 01 Mar 2007 15:35:41 GMT</pubDate><ttl>60</ttl><item><title>Hibernate配置手册</title><link>http://www.blogjava.net/waterjava/archive/2006/11/06/79301.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 05 Nov 2006 22:30:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/11/06/79301.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/79301.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/11/06/79301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/79301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/79301.html</trackback:ping><description><![CDATA[
		<p>出处:http://www.chinabs.net/webj2ee/default.asp?infoid=424<br /><br />Hibernate.cfg.xml配置文件：<br />&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />&lt;!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "hibernate-configuration-2.0.dtd"&gt;<br />&lt;hibernate-configuration&gt;<br />    &lt;session-factory&gt;<br />        &lt;!-- properties --&gt;<br />        &lt;!-- jndi --&gt;<br />        &lt;property name="connection.datasource"&gt;java:comp/env/jdbc/quickstart&lt;/property&gt;<br />        &lt;property name="connection.provider_class"&gt;net.sf.hibernate.connection.DatasourceConnectionProvider&lt;/property&gt;<br />        &lt;property name="dialect"&gt;net.sf.hibernate.dialect.SQLServerDialect&lt;/property&gt;<br />        &lt;!-- jdbc<br />        &lt;property name="connection.url"&gt;jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=pubs&lt;/property&gt;<br />        &lt;property name="connection.driver_class"&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/property&gt;<br />        &lt;property name="connection.username"&gt;sa&lt;/property&gt;<br />        &lt;property name="connection.password"&gt;&lt;/property&gt;<br />         --&gt;<br />        &lt;property name="jdbc.fetch_size"&gt;50&lt;/property&gt;&lt;!-- 一次读的数据库记录数 --&gt;<br />        &lt;property name="jdbc.batch_size"&gt;30&lt;/property&gt;&lt;!-- 设定对数据库进行批量删除 --&gt;<br />        &lt;property name="show_sql"&gt;true&lt;/property&gt;&lt;!-- 将Hibernate发送给数据库的sql显示出来 --&gt;<br />        &lt;!-- Mapping files --&gt;<br />        &lt;mapping resource="cat.hbm.xml"/&gt;<br />    &lt;/session-factory&gt;<br />&lt;/hibernate-configuration&gt;</p>
		<br />
		<p>数据库表主键的知识点：<br />Generator 为每个 POJO 的实例提供唯一标识。一般情况，我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例，其中包括：</p>
		<br />
		<p>“assigned”<br />主键由外部程序负责生成，在 save() 之前指定一个。</p>
		<br />
		<p>“hilo”<br />通过hi/lo 算法实现的主键生成机制，需要额外的数据库表或字段提供高位值来源。</p>
		<br />
		<p>“seqhilo”<br />与hilo 类似，通过hi/lo 算法实现的主键生成机制，需要数据库中的 Sequence，适用于支持 Sequence 的数据库，如Oracle。</p>
		<br />
		<p>“increment”<br />主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是：不能在集群下使用。</p>
		<br />
		<p>“identity”<br />采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。</p>
		<br />
		<p>“sequence”<br />采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。</p>
		<br />
		<p>“native”<br />由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。 </p>
		<br />
		<p>“uuid.hex”<br />由 Hibernate 基于128 位 UUID 算法 生成16 进制数值（编码后以长度32 的字符串表示）作为主键。</p>
		<br />
		<p>“uuid.string”<br />与uuid.hex 类似，只是生成的主键未进行编码（长度16），不能应用在 PostgreSQL 数据库中。</p>
		<br />
		<p>“foreign”<br />使用另外一个相关联的对象的标识符作为主键。</p>
		<br />
		<p>以下举例：<br />1、指定参数的情况：<br />    &lt;id name="id" unsaved-value="0"&gt; <br />      &lt;generator class="sequence"&gt;<br />        &lt;param name="sequence"&gt;SEQ_CHILD&lt;/param&gt;<br />      &lt;/generator&gt;<br />&lt;/id&gt;<br />使用的是sequence，适合oracle数据库；</p>
		<br />
		<p>2、对于sql server2000中的数据库子增字段,在配置文件使用下列方法实现：<br />&lt;id name="id" type="long" unsaved-value="0"&gt;<br />     &lt;column name="id" sql-type="numeric" not-null="true" /&gt;<br />     &lt;generator class="identity" /&gt; <br />&lt;/id&gt;<br />这里主要是:identity:代表由sql server2000数据库自己提供子增字段.如果要hibernate自己提供,则用increment关键字来实现</p>
		<br />
		<p>3、如果表中的主键用字符串类型:可以用hibernate自己提供的方法实现主键唯一:<br />  &lt;id name="id" type="string" unsaved-value="null"&gt;<br />      &lt;column name="cid" sql-type="char(32)" not-null="true" /&gt;<br />      &lt;generator class="uuid.hex" /&gt;<br />  &lt;/id&gt;<br />使用的是uuid.hex: 采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库。</p>
		<br />
		<p>重要的知识点:<br />1. 如果有部门表,有员工表,员工表中有dep_id,则表部门类和员工类是one-to-many的关系:<br />   可以使用:  ( 在部门类department中使用下列)<br />   Department类:  <br />     /**  部门的所有员工   */<br />    private Set staffs = new TreeSet();<br />    <br />    xml的文件:<br />      &lt;set name="staffs" &gt;<br />          &lt;key column="dep_id"/&gt;<br />          &lt;one-to-many class="hbp.sys.data.Staff"/&gt;<br />      &lt;/set&gt;<br />      如果是list,需要用索引&lt;index&gt; &lt;/index&gt;,具体其中的含义,不是很明白.待以后研究<br />      <br /> 2. 如果部门要有一个负责人,即部门表(tb_department)中有一个字段:staff_id.<br />     那么表示部门和负责人之间的关系是many-to-one的关系<br />     Department类: <br />      /** 部门负责人id */<br />    private Staff staff;<br />    <br />    xml 文件<br />     &lt;many-to-one name="staff" class="hbp.sys.data.Staff"  column="staff_id"/&gt;  <br />  <br /> 3. 多对多关系,一般我们是做一个中间关联表.我用角色和权限做了个例子,<br />      Right(id,name)     Role(id,name)   中间表:tb_role_right(role_id,right_id)<br />      Right类中有一个Role的集合:private Set roles=new TreeSet();<br />      Role类中也有一个Right的集合:private Set rights=new TreeSet();<br />      则两者是明显的多对多关系.使用many-to-many来实现;<br />      xml文件中<br />      right.hbm.xml:如下:<br />        &lt;set name="roles" table="tb_role_right" cascade="all"&gt;<br />           &lt;key column="right_id"/&gt;<br />           &lt;many-to-many column="role_id" class="hbp.sys.data.Role"/&gt;<br />        &lt;/set&gt; <br />      role.hbm.xml文件中类似:<br />        &lt;set name="rights" table="tb_role_right" cascade="all"&gt;<br />          &lt;key column="role_id"/&gt;<br />          &lt;many-to-many column="right_id" class="hbp.sys.data.Right"/&gt;<br />        &lt;/set&gt; </p>
		<br />
		<p>4. 几个值得注意的问题:<br />        a)在xml?映射文件中,写类的名字时一定用类的全名:即:包+类名如:(hbp.sys.data.Staff),这个错误使我费了半天劲.:(<br />        b)我在写实现基本DAO操作时,写了<br />             session.delete("from Right as right where right.id="+id);  <br />             程序死活报错,我折腾了半天,跟踪到底,才恍然大悟,hibernate在解析sql语句的时候把<br />             其中的right,当成了数据库中的右连接("保留字"),唉,这种关键字,不能随便用啊,:)</p>
		<br />
		<p>5. hibernate中HQL语言的查询根据你的sql的不同而返回不同的对象类型.<br />         如果你使用session.find(String hql)<br />         一般会返回一个List,如:from Staff staff;返回的是包含所有的员工对象的集合<br />         如你的hql为:select count(*) from Staff staff;则返回的是一个Integer对象<br />         如果你使用的hql为:select count(distinct staff.name),count(*) from Staff staff;则返回的是一个Object<br />         即Object[],需要先把他转换成Object[],然后在取[0],[1].<br />         这种设计我不知道hibernate是如何处理的,感觉既好也不好.好的是可以使用一个find获得任意查询<br />         不好在于根据hql来处理返回结果,容易出错.</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/79301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-11-06 06:30 <a href="http://www.blogjava.net/waterjava/archive/2006/11/06/79301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3+mysql5.0+tomcat5.5.20的hibernate.cfg.xml文件</title><link>http://www.blogjava.net/waterjava/archive/2006/10/24/76987.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Tue, 24 Oct 2006 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/10/24/76987.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/76987.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/10/24/76987.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/76987.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/76987.html</trackback:ping><description><![CDATA[
		<p>&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />&lt;!DOCTYPE hibernate-configuration<br />    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"<br />    "<a href="http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd</a>"&gt;</p>
		<p>&lt;hibernate-configuration&gt;</p>
		<p>    &lt;session-factory&gt;</p>
		<p>
				<br />        &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;</p>
		<p>        &lt;property name="hibernate.connection.url"&gt;jdbc:mysql:///test&lt;/property&gt;</p>
		<p>        &lt;property name="hibernate.connection.username"&gt;username&lt;/property&gt;</p>
		<p>        &lt;property name="hibernate.connection.password"&gt;password&lt;/property&gt;</p>
		<p>        &lt;property name="hibernate.connection.pool_size"&gt;100&lt;/property&gt;</p>
		<p>        &lt;property name="show_sql"&gt;false&lt;/property&gt;</p>
		<p>        &lt;property name="dialect"&gt; org.hibernate.dialect.MySQLDialect&lt;/property&gt;</p>
		<p>        &lt;!-- Mapping files --&gt;<br />        &lt;mapping resource="Train.hbm.xml"/&gt;</p>
		<p>    &lt;/session-factory&gt;</p>
		<p>&lt;/hibernate-configuration&gt;</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/76987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-10-24 15:25 <a href="http://www.blogjava.net/waterjava/archive/2006/10/24/76987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate3+mssql2000+tomcat5.5.20的hibernate.cfg.xml</title><link>http://www.blogjava.net/waterjava/archive/2006/10/24/76986.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Tue, 24 Oct 2006 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/10/24/76986.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/76986.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/10/24/76986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/76986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/76986.html</trackback:ping><description><![CDATA[
		<p>&lt;?xml version='1.0' encoding='UTF-8'?&gt;<br />&lt;!DOCTYPE hibernate-configuration PUBLIC<br />          "-//Hibernate/Hibernate Configuration DTD 2.0//EN"<br />          "<a href="http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd</a>"&gt;</p>
		<p>&lt;!-- DO NOT EDIT: This is a generated file that is synchronized --&gt;<br />&lt;!-- by MyEclipse Hibernate tool integration.                   --&gt;<br />&lt;hibernate-configuration&gt;</p>
		<p>    &lt;session-factory&gt;<br />        &lt;!-- properties --&gt;<br />        &lt;property name="connection.username"&gt;username&lt;/property&gt;<br />        &lt;property name="connection.url"&gt;jdbc:microsoft:sqlserver://localhost:1433;databaseName=test&lt;/property&gt;<br />        &lt;property name="dialect"&gt;org.hibernate.dialect.SQLServerDialect&lt;/property&gt;<br />        &lt;property name="connection.password"&gt;password&lt;/property&gt;<br />        &lt;property name="connection.driver_class"&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/property&gt;</p>
		<p>        &lt;!-- mapping files --&gt;<br />        &lt;mapping resource="Train.hbm.xml"/&gt;</p>
		<p>    &lt;/session-factory&gt;</p>
		<p>&lt;/hibernate-configuration&gt;</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/76986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-10-24 15:22 <a href="http://www.blogjava.net/waterjava/archive/2006/10/24/76986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>