<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Java伴侣 - Hibernate]]></title>
<link>http://www.javamilk.org/</link>
<description><![CDATA[关于工作、学习与生活]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[blurxx@yahoo.cn(Blur)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Java伴侣</title>
	<url>http://www.javamilk.org/images/logos.gif</url>
	<link>http://www.javamilk.org/</link>
	<description>Java伴侣</description>
</image>

			<item>
			<link>http://www.javamilk.org/article.asp?id=1378</link>
			<title><![CDATA[解决Hibernate 3不支持 &#34;&amp;&#34; 运算的SQL语句]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Mon,08 Mar 2010 17:00:20 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1378</guid>
		<description><![CDATA[按位与运算（&amp;）在许多数据库中都是支持的，遗憾的是，Hibernate 3在HQL中不支持&amp;运算，如果你写了如下的HQL：<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code64396);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code64396>wh&#101;re a.id &amp; :mask = :target</div></div><br/><br/>则Hibernate报错：exception: unexpected char: &#39;&amp;&#39;.<br/><br/>如何解决此问题？方法是利用Hibernate支持的自定义SQLFunction，定义一个bitand(a,b)的SQLFunction，然后，自己写一个解释器，生成a &amp; b的SQL语句。<br/><br/>要实现一个自定义的SQLFunction，必须实现SQLFunction接口：<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code56110);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code56110>package com.js.dialect;<br/><br/>import java.util.List;<br/><br/>import o&#114;g.hibernate.Hibernate;<br/>import o&#114;g.hibernate.QueryException;<br/>import o&#114;g.hibernate.dialect.function.SQLFunction;<br/>import o&#114;g.hibernate.engine.Mapping;<br/>import o&#114;g.hibernate.engine.SessionFactoryImplementor;<br/>import o&#114;g.hibernate.type.Type;<br/><br/>/**<br/> * &lt;p&gt;<br/> * Title:BitAndFunction<br/> * &lt;/p&gt;<br/> * &lt;p&gt;<br/> * Description:<br/> * &lt;/p&gt;<br/> * <br/> * @author js<br/> * @version<br/> * @since<br/> */<br/><br/>public class BitAndFunction implements SQLFunction {<br/> public Type getReturnType(Type type, Mapping mapping) {<br/>&nbsp;&nbsp;return Hibernate.INTEGER;<br/> }<br/><br/> public boolean hasArguments() {<br/>&nbsp;&nbsp;return true;<br/> }<br/><br/> public boolean hasParenthesesIfNoArguments() {<br/>&nbsp;&nbsp;return true;<br/> }<br/><br/> public String render(List args, SessionFactoryImplementor factory)<br/>&nbsp;&nbsp; throws QueryException {<br/>&nbsp;&nbsp;if (args.size() != 2) {<br/>&nbsp;&nbsp; throw new IllegalArgumentException(<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#34;BitAndFunction requires 2 arguments!&#34;);<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;return args.get(0).toString() + &#34; &amp; &#34; + args.get(1).toString();<br/> }<br/><br/>}<br/><br/>然后，根据使用的数据库方言，派生一个自定义的CustomSQLDialect：<br/><br/> package com.js.dialect;<br/><br/>import o&#114;g.hibernate.dialect.MySQLInnoDBDialect;<br/><br/>/**<br/> * &lt;p&gt;<br/> * Title:CustomSQLDialect<br/> * &lt;/p&gt;<br/> * &lt;p&gt;<br/> * Description:<br/> * &lt;/p&gt;<br/> * <br/> * @author js<br/> * @version<br/> * @since<br/> */<br/>public class CustomSQLDialect extends MySQLInnoDBDialect {<br/> /**<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;*/<br/> public CustomSQLDialect() {<br/>&nbsp;&nbsp;super();<br/>&nbsp;&nbsp;registerFunction(&#34;bitand&#34;, new BitAndFunction());<br/> }<br/><br/>}</div></div><br/><br/>设定函数名为bitand，参数和返回值均为Hibernate.LONG，现在，用CustomSQLDialect替换配置文件中的设置，然后修改HQL：<br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code34084);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code34084>wh&#101;re bitand(a.id, :mask) = :target</div></div><br/><br/>编译，运行，观察Hibernate的SQL输出，执行不成功！不认识&#34;bitand&#34;!<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1328</link>
			<title><![CDATA[Association references unmapped class的解决方法]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Sat,19 Dec 2009 11:04:02 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1328</guid>
		<description><![CDATA[搞了半天,原来我的NHibernate.cfg.xml文件里没加上新增加的hbm.xml文件 <br/>加上 <br/>Xml代码 <br/>&lt;mapping resource=&#34;wisers/weboa/project/model/xml/item.hbm.xml&#34; /&gt;!&nbsp;&nbsp;<br/><br/>&lt;mapping resource=&#34;wisers/weboa/project/model/xml/item.hbm.xml&#34; /&gt;!<br/><br/>将实体类对应的XML文件的生产操作属性设置成嵌入的资源 <br/><br/>在实体类中除了加入数据访问层命名空间之外（using DAL;） <br/>还必须加入 <br/>C#代码 <br/>using System.Collections;&nbsp;&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1291</link>
			<title><![CDATA[Hibernate中根据映射文件创建数据表]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Fri,06 Nov 2009 15:47:38 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1291</guid>
		<description><![CDATA[只要在hibernate.cfg.xml添加这句话，就可以自动生成数据表 <br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code28338);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code28338>&lt;property name=&#34;hibernate.hbm2ddl.auto&#34;&gt;up&#100;ate&lt;/property&gt; </div></div><br/><br/>up&#100;ate：表示自动根据model对象来更新表结构，启动hibernate时会自动检查数据库，如果缺少表，则自动建表；如果表里缺少列，则自动添加列。 <br/><br/>还有其他的参数： <br/>cr&#101;ate：启动hibernate时，自动删除原来的表，新建所有的表，所以每次启动后的以前数据都会丢失。 <br/><br/>cr&#101;ate-dro&#112;：启动hibernate时，自动创建表，程序关闭时，自动把相应的表都删除。所以程序结束时，表和数据也不会再存在。 <br/><br/>PS：数据库要预先建立好，因为hibernate只会建表，不会建库 ]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1207</link>
			<title><![CDATA[commit后值不变，亦不报错]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Sat,15 Aug 2009 10:04:57 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1207</guid>
		<description><![CDATA[情况，修改了某个字段类型后，再次session.up&#100;ate(o);发现数据库中数值未变，也无异常抛出，排查后发现hbm.xml映射文件中该字段类型为从int改成double，导致该现象发生]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1187</link>
			<title><![CDATA[Hibernate 自动建表 指定字符集编码]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Fri,17 Jul 2009 09:05:37 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1187</guid>
		<description><![CDATA[hibernate 中mysql.cfg配置文件如下：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code59428);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code59428>&lt;property name=&#34;connection.url&#34;&gt;<br/>&#160;&#160;&#160;&#160;jdbc:mysql://localhost:3306/webseo?useUnicode=true<br/>&lt;/property&gt;<br/><br/>&lt;property name=&#34;connection.characterEncoding&#34;&gt;UTF-8&lt;/property&gt;</div></div><br/><br/><br/>但是用Hibernate自动建表的时候，表编码依旧是：<br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://www.javamilk.org/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">ENGINE=InnoDB DEFAULT CHARSET=latin1;</div></div><br/><br/>解决办法：<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code10035);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code10035>dro&#112; database webseo;<br/>cr&#101;ate database webseo&nbsp;&nbsp;<span style="color:Red">charset=utf8;</span></div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1153</link>
			<title><![CDATA[Hibernate映射文件中索引及约束的使用 ]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Tue,26 May 2009 16:11:04 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1153</guid>
		<description><![CDATA[1、添加索引：在一对多的关系中，在多的一方会产生一个外键，这个外键没有自动添加索引，当存在从一的一端产生对多的一端的查询时，有可能会在多的一端造成全表查询问题，数据量巨大时会产生严重的性能问题。可以在多一端的外键上添加索引（index=&#34;user_group_id_idx&#34;）来解决这个问题。例如：<br/><br/>&lt;?xml version=&#34;1.0&#34;?&gt;<br/>&lt;!DOCTYPE hibernate-mapping PUBLIC <br/> &#34;-//Hibernate/Hibernate Mapping DTD 3.0//EN&#34;<br/> &#34;<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" target="_blank" rel="external">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>&#34;&gt;<br/>&lt;hibernate-mapping&gt;<br/> &lt;class name=&#34;com.bjsxt.hibernate.User&#34; table=&#34;t_user&#34;&gt;<br/>&nbsp;&nbsp;&lt;id name=&#34;id&#34;&gt;<br/>&nbsp;&nbsp; &lt;generator class=&#34;sequence&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name=&#34;sequence&#34;&gt;user_id_seq&lt;/param&gt;<br/>&nbsp;&nbsp; &lt;/generator&gt;<br/>&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&lt;property name=&#34;name&#34;&gt;&lt;/property&gt;<br/>&nbsp;&nbsp;&lt;many-to-one name=&#34;group&#34; column=&#34;group_id&#34; index=&#34;user_group_id_idx&#34;&gt;&lt;/many-to-one&gt;<br/> &lt;/class&gt;<br/> <br/>&lt;/hibernate-mapping&gt;<br/><br/>发出的SQL语句为：<br/>cr&#101;ate index user_group_id_idx on t_user (group_id)<br/><br/>2、添加约束：id会产生主键约束，同时会建立索引；key会产生外键，但默认不会建立索引；在class或set上通过使用check关键字来产生check约束（例如：&lt;set name=&#34;emailAddresses&#34; table=&#34;t_email&#34; check=&#34;email_address like &#39;%@%&#39;&#34;&gt;）；单个字段的唯一键通过（unique=&#34;true&#34;）设置，多个字段联合唯一通过在需要联合的字段上添加（unique-key=&#34;name&#34;）来实现，其中对联合唯一索引的unique-key的值必须相同；通过not-null=&#34;true&#34;来设置字段的非空约束。<br/><br/>&lt;?xml version=&#34;1.0&#34;?&gt;<br/>&lt;!DOCTYPE hibernate-mapping PUBLIC<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;-//Hibernate/Hibernate Mapping DTD 3.0//EN&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" target="_blank" rel="external">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</a>&#34;&gt;<br/><br/>&lt;hibernate-mapping&gt;<br/> &lt;class name=&#34;events.Person&#34; table=&#34;t_person&#34;&gt;<br/>&nbsp;&nbsp;&lt;id name=&#34;id&#34; column=&#34;person_id&#34;&gt;<br/>&nbsp;&nbsp; &lt;generator class=&#34;sequence&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param name=&#34;sequence&#34;&gt;person_id_seq&lt;/param&gt;<br/>&nbsp;&nbsp; &lt;/generator&gt;<br/>&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&lt;property name=&#34;age&#34;&gt;&lt;/property&gt;<br/>&nbsp;&nbsp;&lt;property name=&#34;firstName&#34; unique-key=&#34;name&#34;&gt;&lt;/property&gt;<br/>&nbsp;&nbsp;&lt;property name=&#34;lastName&#34; unique-key=&#34;name&#34;&gt;&lt;/property&gt;<br/>&nbsp;&nbsp;&lt;set name=&#34;emailAddresses&#34; table=&#34;t_email&#34; check=&#34;email_address like &#39;%@%&#39;&#34;&gt;<br/>&nbsp;&nbsp; &lt;key column=&#34;person_id&#34;&gt;&lt;/key&gt;<br/>&nbsp;&nbsp; &lt;element column=&#34;email_address&#34; type=&#34;string&#34;&gt;&lt;/element&gt;<br/>&nbsp;&nbsp;&lt;/set&gt;<br/>&nbsp;&nbsp;&lt;set name=&#34;events&#34; table=&#34;t_person_event&#34;&gt;<br/>&nbsp;&nbsp; &lt;key column=&#34;person_id&#34;&gt;&lt;/key&gt;<br/>&nbsp;&nbsp; &lt;many-to-many class=&#34;events.Event&#34; column=&#34;event_id&#34;&gt;&lt;/many-to-many&gt;<br/>&nbsp;&nbsp;&lt;/set&gt;<br/> &lt;/class&gt;<br/>&lt;/hibernate-mapping&gt;<br/><br/>产生的SQL语句是：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; table t_email cascade constraints<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; table t_event cascade constraints<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; table t_person cascade constraints<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; table t_person_event cascade constraints<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; sequence event_id_seq<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;dro&#112; sequence person_id_seq<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate table t_email (<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person_id number(19,0) not null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;email_address varchar2(255 char),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check (email_address like &#39;%@%&#39;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate table t_event (<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_id number(19,0) not null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title varchar2(255 char),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_date date,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;primary key (event_id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate table t_person (<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person_id number(19,0) not null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;age number(10,0),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firstName varchar2(255 char),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastName varchar2(255 char),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;primary key (person_id),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unique (firstName, lastName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate table t_person_event (<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event_id number(19,0) not null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person_id number(19,0) not null,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;primary key (person_id, event_id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;alt&#101;r table t_email <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add constraint FKA03188117708282F <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreign key (person_id) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;references t_person<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;alt&#101;r table t_person_event <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add constraint FKC7F6A31B7708282F <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreign key (person_id) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;references t_person<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;alt&#101;r table t_person_event <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add constraint FKC7F6A31BF96D1A45 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreign key (event_id) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;references t_event<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate sequence event_id_seq<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;cr&#101;ate sequence person_id_seq<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1152</link>
			<title><![CDATA[Hibernate中discriminator]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Tue,26 May 2009 14:11:41 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1152</guid>
		<description><![CDATA[tbl_user 是一张表。User是它一个po，NormalUser也是它的一个po，NormalUser继承于User，那么将User和NormalUser持久到数据库的tbl_user中，tbl_user是怎么区分的呢？tbl_user中有一个字段type，它是来区分的。 <br/><br/>来看他们的映射文件： <br/><br/><br/>Java代码 <br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code25652);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code25652>&lt;class name=&#34;com.apidoc.app.user.model.User&#34;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table=&#34;tbl_user&#34;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discriminator-value=&#34;2&#34;&gt;&nbsp;&nbsp; <br/>&nbsp;&nbsp; &lt;id name=&#34;id&#34; column=&#34;id&#34;&gt;&lt;generator class=&#34;native&#34; /&gt;&lt;/id&gt;&nbsp;&nbsp; <br/>&nbsp;&nbsp; &lt;discriminator column=&#34;type&#34; type=&#34;int&#34;/&gt;&nbsp;&nbsp;<br/><br/> &lt;class name=&#34;com.apidoc.app.user.model.User&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table=&#34;tbl_user&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; discriminator-value=&#34;2&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;id name=&#34;id&#34; column=&#34;id&#34;&gt;&lt;generator class=&#34;native&#34; /&gt;&lt;/id&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;discriminator column=&#34;type&#34; type=&#34;int&#34;/&gt;</div></div><br/><br/>Java代码 <br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code11362);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code11362>&lt;subclass name=&#34;com.apidoc.app.user.model.NormalUser&#34;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extends=&#34;com.apidoc.app.user.model.User&#34;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discriminator-value=&#34;1&#34;&gt;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&lt;/subclass&gt;&nbsp;&nbsp;<br/><br/>&lt;subclass name=&#34;com.apidoc.app.user.model.NormalUser&#34; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extends=&#34;com.apidoc.app.user.model.User&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;discriminator-value=&#34;1&#34;&gt;<br/>&nbsp;&nbsp;&lt;/subclass&gt;</div></div><br/><br/>当你用User时hibernate就会将tbl_user的type的值置为2，当你用NormalUser时hibernate就会将tbl_user的type的值置为1 <br/><br/>这就区分了，而且不用你手动操作 <br/>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1151</link>
			<title><![CDATA[Hibernate中的继承映射 ]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Tue,26 May 2009 14:10:47 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1151</guid>
		<description><![CDATA[Hibernate的继承映射包含了三种不同的策略：<br/><br/><br/>每簇类使用一个表； <br/>每个子类一个表； <br/>每个具体内一个表（有限制）。<br/><br/>假设我们有四个类Animal，Dog，Cat，其代码如下：<br/>文件名：Animal.java<br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code19257);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code19257>class Animal {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String identifier;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String category;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// setter and getter<br/>}<br/>文件名：Dog.java<br/>class Dog extends Animal {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String <br/>&nbsp;&nbsp;&nbsp;&nbsp;// setter and getter<br/>}<br/>文件名：Cat.java<br/>class Cat extends Animal {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private String <br/>&nbsp;&nbsp;&nbsp;&nbsp;// setter and getter<br/>}</div></div><br/><br/>每簇类使用一个表 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用每簇类使用一个表的策略时，有一个限制就时子类不能有NOT NULL，映射文件为：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Animal.hbm.xml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code69863);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code69863>&lt;class name=&#34;Animal&#34; table=&#34;TB_ANIMAL&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id name=&#34;identifier&#34; type=&#34;string&#34; column=&#34;IDENTIFIER&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class=&#34;uuid.hex&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;discriminator column=&#34;ANIMAL_TYPE&#34; type=&#34;string&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&#34;name&#34; column=&#34;NAME&#34; type=&#34;string&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;subclass name=&#34;Dog&#34; discriminator-value=&#34;DOG&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/subclass&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;subclass name=&#34;Cat&#34; discriminator-value=&#34;CAT&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/subclass&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</div></div><br/><br/>每个子类一个表 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用每个子类一个表的策略时，可以使用一个映射文件实现，也可以分成多个映射文件来实现。每个子类一个映射文件的情况：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Animal.hbm.xml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code91485);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code91485>&lt;class name=&#34;Animal&#34; table=&#34;ANIMAL&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id name=&#34;identifier&#34; column=&#34;IDENTIFIER&#34; type=&#34;string&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class=&#34;uuid.hex&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property &gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Dog.hbm.xml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code79736);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code79736>&lt;joined-subclass name=&#34;Dog&#34; table=&#34;DOG&#34; extends=&#34;Animal&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key column=&#34;DOG_ID&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/joined-subclass&gt;</div></div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Cat.hbm.xml<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code14984);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code14984>&lt;joined-subclass name=&#34;Cat&#34; table=&#34;CAT&#34; extends=&#34;Cat&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key column=&#34;CAT_ID&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/joined-subclass&gt;</div></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个子类一个表的策略实际上一种one-to-one的映射。<br/><br/>每个具体内一个表（有限制） <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用每个具体内一个表（有限制）策略时，每一个子类的映射文件将要包含所有父类中的属性，映射文件：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Dog.hbm.xml<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code82681);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code82681>&lt;class name=&#34;Dog&#34; table=&#34;DOG&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id name=&#34;identifier&#34; column=&#34;IDENTIFIER&#34; type=&#34;string&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class=&#34;uuid.hex&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&#34;name&#34; column=&#34;NAME&#34; type=&#34;string&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</div></div><br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件名：Cat.hbm.xml<br/>&nbsp;&nbsp;<div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code26474);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.javamilk.org/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code26474>&nbsp;&nbsp;&nbsp;&nbsp; &lt;class name=&#34;Cat&#34; table=&#34;CAT&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id name=&#34;identifier&#34; column=&#34;IDENTIFIER&#34; type=&#34;string&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;generator class=&#34;uuid.hex&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/id&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=&#34;name&#34; column=&#34;NAME&#34; type=&#34;string&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class&gt;</div></div>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1113</link>
			<title><![CDATA[No Dialect mapping for JDBC type 3错误]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Sat,18 Apr 2009 08:53:07 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1113</guid>
		<description><![CDATA[ 自定义Hibernate Dialect解决cr&#101;ateSQLQuery时的decimal,long类型问题<br/><br/>o&#114;g.hibernate.MappingException: No Dialect mapping for JDBC type: 3<br/><br/>首先建一个类,继承org.hibernate.dialect.DB2Dialect,该类的内容如下:<br/><br/>import java.sql.Types;<br/><br/>import o&#114;g.hibernate.Hibernate;<br/>import o&#114;g.hibernate.dialect.DB2Dialect;<br/><br/>public class PmDb2Dialect extends DB2Dialect<br/>{<br/>public PmDb2Dialect()<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp; super();<br/>&nbsp;&nbsp;&nbsp;&nbsp; registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());<br/>}<br/>}<br/><br/>第二步,就是修改hibernate的配置文件hibernate.cfg.xml:<br/><br/>将:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&#34;hibernate.dialect&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#114;g.hibernate.dialect.DB2Dialect<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br/><br/>改为:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name=&#34;hibernate.dialect&#34;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.yonder.pm.common.PmDb2Dialect<br/>&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.javamilk.org/article.asp?id=1112</link>
			<title><![CDATA[在Hibernate中使用数据库字段默认值的配置]]></title>
			<author>blurxx@yahoo.cn(Java伴侣)</author>
			<category><![CDATA[Hibernate]]></category>
			<pubDate>Fri,17 Apr 2009 11:21:14 +0800</pubDate>
			<guid>http://www.javamilk.org/default.asp?id=1112</guid>
		<description><![CDATA[1、在相关表的映射XML文件的class项增加：dynamic-ins&#101;rt=&#34;true&#34; <br/>2、同时需在相关字段设置：not-null=&#34;false&#34;&nbsp;&nbsp;]]></description>
		</item>
		
</channel>
</rss>
