﻿<?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-我的Blog我做主^_^-文章分类-HIBERNATE</title><link>http://www.blogjava.net/wyz191/category/18592.html</link><description>走向一条通往JAVA的不归路...</description><language>zh-cn</language><lastBuildDate>Fri, 12 Aug 2011 16:46:05 GMT</lastBuildDate><pubDate>Fri, 12 Aug 2011 16:46:05 GMT</pubDate><ttl>60</ttl><item><title>Hibernate 异常</title><link>http://www.blogjava.net/wyz191/articles/356185.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Wed, 10 Aug 2011 00:56:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/356185.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/356185.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/356185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/356185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/356185.html</trackback:ping><description><![CDATA[<p>1、<a href="http://littcai.iteye.com/blog/360013"><font color="#108ac6"><span style="color: red">Using non-qualified column reference</span></font></a> <em class="actions"></em></p>
<p><br />在hibernate中使用HQL直接对数据库进行update、save、delete操作时，日志中会输出：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" href="http://littcai.iteye.com/blog/360013#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-j"><li><span>org.hibernate.hql.ast.tree.FromElementType&nbsp;-</span><span class="number"><font color="#c00000">164767</font></span><span>&nbsp;[http-</span><span class="number"><font color="#c00000">8080</font></span><span>-Processor72]&nbsp;WARN&nbsp;&nbsp;&nbsp;-&nbsp;Using&nbsp;non-qualified&nbsp;column&nbsp;reference&nbsp;&nbsp;&nbsp;</span></li></ol></div><pre class="java" title="Using non-qualified column reference" style="display: none" pre_index="0" source_url="http://littcai.iteye.com/blog/360013" codeable_type="Blog" codeable_id="360013" name="code">org.hibernate.hql.ast.tree.FromElementType -164767 [http-8080-Processor72] WARN   - Using non-qualified column reference </pre>
<p>&nbsp;</p>
<p>&nbsp;的警告信息。该警告实乃Hibernate-3.2.0版本的BUG，原因是hibernate执行HQL时没有细分操作类型，日志记录类型有误，该BUG已在3.2.1中修复。<br /></p>
<p><br />2、<span style="color: red">deleted object would be re-saved by cascade (remove deleted object from associations)&nbsp;</span><br />&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在hibernate 删除关联时会出现eleted object would be re-saved by cascade (remove deleted object from associations)的异常，结合别人的和自己的经验通常有三种解决的方案：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法1 删除Set方的cascade：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法2 解决关联关系后，再删除 </p>
<p>&nbsp;</p>
<div align="center">
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt;background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div>&nbsp;&nbsp;&nbsp; <img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">onside.getManys().remove(thisMany);&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在所关联的一方的set中移走当前要删除的对象</span><span style="color: #008000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">thisMany.setOne(</span><span style="color: #0000ff">null</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">设置所对应的一方为空，解除它们之间的关系</span><span style="color: #008000"><br /><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp; </span><span style="color: #000000">manyDao.delete(thisMany);</span></div></div></div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方法3 在many-to-one方增加cascade 但值不能是none<br /></p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/wyz191/aggbug/356185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2011-08-10 08:56 <a href="http://www.blogjava.net/wyz191/articles/356185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate 权限管理模块 小样 composite-element 的应用</title><link>http://www.blogjava.net/wyz191/articles/348776.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Fri, 22 Apr 2011 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/348776.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/348776.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/348776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/348776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/348776.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">针对权限管理模块的简单操作 -- 小样<br />
<br />
权限模块<br />
<br />
管理员 - 角色 - 资源 - 权限<br />
<br />
管理员 -&gt; 管理员-角色 &lt;- 角色<br />
<br />
角色 -&gt; &lt;角色-资源-权限&gt; &lt;- 资源<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;- 权限<br />
</span>&nbsp;<br />
<p>import java.util.HashSet;</p>
<p>/**<br />
&nbsp;* 系统角色信息<br />
&nbsp;*<br />
&nbsp;*/<br />
public class SysRole {</p>
<p>&nbsp;private String roleNo ;&nbsp;&nbsp;//角色编码<br />
&nbsp;<br />
&nbsp;private String roleName ;&nbsp;//角色名称<br />
&nbsp;<br />
&nbsp;private String roleDesc ;&nbsp;//角色描述<br />
&nbsp;<br />
&nbsp;private java.util.Set&lt;Role_Menu_Perm&gt; rmpSet = new java.util.HashSet&lt;Role_Menu_Perm&gt;();<br />
&nbsp;<br />
&nbsp;public java.util.Set&lt;Role_Menu_Perm&gt; getRmpSet() {<br />
&nbsp;&nbsp;return rmpSet;<br />
&nbsp;}</p>
<p>&nbsp;public void setRmpSet(java.util.Set&lt;Role_Menu_Perm&gt; rmpSet) {<br />
&nbsp;&nbsp;this.rmpSet = rmpSet;<br />
&nbsp;}</p>
<p>&nbsp;public String getRoleNo() {<br />
&nbsp;&nbsp;return roleNo;<br />
&nbsp;}</p>
<p>&nbsp;public void setRoleNo(String roleNo) {<br />
&nbsp;&nbsp;this.roleNo = roleNo;<br />
&nbsp;}</p>
<p>&nbsp;public String getRoleName() {<br />
&nbsp;&nbsp;return roleName;<br />
&nbsp;}</p>
<p>&nbsp;public void setRoleName(String roleName) {<br />
&nbsp;&nbsp;this.roleName = roleName;<br />
&nbsp;}</p>
<p>&nbsp;public String getRoleDesc() {<br />
&nbsp;&nbsp;return roleDesc;<br />
&nbsp;}</p>
<p>&nbsp;public void setRoleDesc(String roleDesc) {<br />
&nbsp;&nbsp;this.roleDesc = roleDesc;<br />
&nbsp;}<br />
}<br />
<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;<br />
&lt;hibernate-mapping&gt;<br />
&nbsp;&lt;class name="com.permissions.model.SysRole" table="SysRole"&gt;<br />
&nbsp; &lt;id column="roleNo" name="roleNo" type="string"&gt;<br />
&nbsp;&nbsp; &lt;generator class="assigned"/&gt;<br />
&nbsp; &lt;/id&gt;<br />
&nbsp; &lt;property column="roleName" name="roleName" type="string" length="20" not-null="true" unique="true"/&gt;<br />
&nbsp; &lt;property column="roleDesc" name="roleDesc" type="string" length="200"/&gt;<br />
&nbsp; &lt;!--&nbsp;<span style="color: #0000ff">如果这里的注释信息打开，Role_Menu_Perm类中的注释部分也要打开<br />
</span>&nbsp;&nbsp;<span style="color: red">&nbsp;&lt;set name="rmpSet" table="Role_Menu_Perm" inverse="false" lazy="false"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;key column="roleNo" not-null="true"&gt;&lt;/key&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;composite-element class="com.permissions.model.Role_Menu_Perm"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="menuNo"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;property name="permNo"&gt;&lt;/property&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;/composite-element&gt;<br />
&nbsp;&nbsp; &lt;/set&gt;<br />
</span>&nbsp; --&gt;<br />
&nbsp; <span style="color: red">&lt;set name="rmpSet" table="Role_Menu_Perm" inverse="false" lazy="false"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;key column="roleNo" not-null="true"&gt;&lt;/key&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;composite-element class="com.permissions.model.Role_Menu_Perm"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;many-to-one name="menu"&nbsp; column="menuNo"&gt;&lt;/many-to-one&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;many-to-one name="perm" column="permNo"&gt;&lt;/many-to-one&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;/composite-element&gt;<br />
&nbsp;&nbsp; &lt;/set&gt;<br />
</span>&nbsp;&lt;/class&gt;<br />
&lt;/hibernate-mapping&gt;<br />
/**<br />
*角色-资源-权限<br />
*<br />
**/</p>
<p>public class Role_Menu_Perm {</p>
<p>//&nbsp;private String roleNo ;<br />
//&nbsp;<br />
//&nbsp;private String menuNo ;<br />
//&nbsp;<br />
//&nbsp;private String permNo ;<br />
//&nbsp;<br />
&nbsp;private SysRole role ;<br />
&nbsp;<br />
&nbsp;private SysMenu menu ;<br />
&nbsp;<br />
&nbsp;private SysPermissions perm ;</p>
<p>&nbsp;public SysRole getRole() {<br />
&nbsp;&nbsp;return role;<br />
&nbsp;}</p>
<p>&nbsp;public void setRole(SysRole role) {<br />
&nbsp;&nbsp;this.role = role;<br />
&nbsp;}</p>
<p>&nbsp;public SysMenu getMenu() {<br />
&nbsp;&nbsp;return menu;<br />
&nbsp;}</p>
<p>&nbsp;public void setMenu(SysMenu menu) {<br />
&nbsp;&nbsp;this.menu = menu;<br />
&nbsp;}</p>
<p>&nbsp;public SysPermissions getPerm() {<br />
&nbsp;&nbsp;return perm;<br />
&nbsp;}</p>
<p>&nbsp;public void setPerm(SysPermissions perm) {<br />
&nbsp;&nbsp;this.perm = perm;<br />
&nbsp;}</p>
<p>//&nbsp;public String getRoleNo() {<br />
//&nbsp;&nbsp;return roleNo;<br />
//&nbsp;}<br />
//<br />
//&nbsp;public void setRoleNo(String roleNo) {<br />
//&nbsp;&nbsp;this.roleNo = roleNo;<br />
//&nbsp;}<br />
//<br />
//&nbsp;public String getMenuNo() {<br />
//&nbsp;&nbsp;return menuNo;<br />
//&nbsp;}<br />
//<br />
//&nbsp;public void setMenuNo(String menuNo) {<br />
//&nbsp;&nbsp;this.menuNo = menuNo;<br />
//&nbsp;}<br />
//<br />
//&nbsp;public String getPermNo() {<br />
//&nbsp;&nbsp;return permNo;<br />
//&nbsp;}<br />
//<br />
//&nbsp;public void setPermNo(String permNo) {<br />
//&nbsp;&nbsp;this.permNo = permNo;<br />
//&nbsp;}<br />
}</p>
<br />
<img src ="http://www.blogjava.net/wyz191/aggbug/348776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2011-04-22 10:45 <a href="http://www.blogjava.net/wyz191/articles/348776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate实践</title><link>http://www.blogjava.net/wyz191/articles/270135.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Mon, 11 May 2009 16:21:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/270135.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/270135.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/270135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/270135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/270135.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Hibernate实践 引自:http://www.blogjava.net/BlueDavy/archive/2006/03/27/37582.html一. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 序 在实际项目中使用Hibernate有两年多了，在两年多的实践过程中既体验到...&nbsp;&nbsp;<a href='http://www.blogjava.net/wyz191/articles/270135.html'>阅读全文</a><img src ="http://www.blogjava.net/wyz191/aggbug/270135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2009-05-12 00:21 <a href="http://www.blogjava.net/wyz191/articles/270135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>discriminator-value="integer" 的解决方案</title><link>http://www.blogjava.net/wyz191/articles/235883.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Wed, 22 Oct 2008 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/235883.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/235883.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/235883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/235883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/235883.html</trackback:ping><description><![CDATA[<span id="ArticleContent1_ArticleContent1_lblContent">&nbsp;
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">借助于</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">强大的</span><span lang="EN-US"><font face="Times New Roman">O/R Mapping</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">能力，我们能够通过</span><span lang="EN-US"><font face="Times New Roman">discriminator</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">轻易地将一颗继承树映射到一个表中，通过</span><span lang="EN-US"><font face="Times New Roman">discriminator</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">确定具体映射的子类。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><O:P><font face="Times New Roman" size="3">&nbsp;</font></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在设置</span><span lang="EN-US"><font face="Times New Roman">@hibernate.discriminator column="type" type="integer"</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后，启动</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">报错：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><font face="Courier New" color="#ff0000" size="3"><strong>Could not format discriminator value to SQL string</strong></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><O:P><font face="Times New Roman" size="3">&nbsp;<a href="http://dev.csdn.net/article/82/82734.shtm">http://dev.csdn.net/article/82/82734.shtm</a><br />
</font></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">http://forum.hibernate.org/viewtopic.php?t=974225</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">搜索</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">官方文档后发现问题，原来</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认的</span><span lang="EN-US"><font face="Times New Roman">discriminator</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">type</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span><span lang="EN-US"><font face="Times New Roman">String</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，当设置</span><span lang="EN-US"><font face="Times New Roman">discriminator</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang="EN-US"><font face="Times New Roman">type</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span><span lang="EN-US"><font face="Times New Roman">integer</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">后，需要为父类也设置</span><span lang="EN-US"><font face="Times New Roman">@hibernate.class table="TABLE_NAME" discriminator-value="not null"</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，否则，</span><span lang="EN-US"><font face="Times New Roman">Hibernate</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">默认的</span><span lang="EN-US"><font face="Times New Roman">discriminator-value</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是完整的类名，在转换</span><span lang="EN-US"><font face="Times New Roman">String</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">到</span><span lang="EN-US"><font face="Times New Roman">int</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时造成</span><span lang="EN-US"><font face="Times New Roman">NumberFormatException</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><O:P><font face="Times New Roman" size="3">&nbsp;</font></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最后运行</span><span lang="EN-US"><font face="Times New Roman">XDoclet</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，生成</span><span lang="EN-US"><font face="Times New Roman">hbm</font></span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件：</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US"><O:P><font face="Times New Roman" size="3">&nbsp;</font></O:P></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">&lt;?xml version="1.0" encoding="iso-8859-1"?&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">&lt;!DOCTYPE hibernate-mapping PUBLIC</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>"-//Hibernate/Hibernate Mapping DTD 3.0//EN" </span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><font color="#008080"><strong>&lt;hibernate-mapping&gt;<O:P></O:P></strong></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;class name="com.crackj2ee.example.AbstractClass" table="TABLE_NAME" <font color="#ff0000">discriminator-value="not null"</font>&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;id</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"> <span style="background: white; mso-highlight: white">name="id" column="id" type="java.lang.Long" unsaved-value="null"&gt;</span><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;generator class="increment"/&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/id&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;discriminator column="type" not-null="true" type="integer"/&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;subclass name="com.crackj2ee.example.SubClass1" <font color="#ff0000">discriminator-value="1"</font>&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;subclass name="com.crackj2ee.example.SubClass2" <font color="#ff0000">discriminator-value="2"</font>&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-layout-grid-align: none" align="left"><font color="#008080"><strong><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>&lt;/class&gt;</span><span lang="EN-US" style="font-size: 10pt; font-family: 'Courier New'; mso-font-kerning: 0pt"><O:P></O:P></span></strong></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 10pt; background: white; font-family: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white"><font color="#008080"><strong>&lt;/hibernate-mapping&gt;</strong></font></span></p>
</span>
<img src ="http://www.blogjava.net/wyz191/aggbug/235883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2008-10-22 10:48 <a href="http://www.blogjava.net/wyz191/articles/235883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate程序性能优化的考虑要点(转贴)</title><link>http://www.blogjava.net/wyz191/articles/104858.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Tue, 20 Mar 2007 00:15:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/104858.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/104858.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/104858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/104858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/104858.html</trackback:ping><description><![CDATA[
		<h1 class="block_title">
				<font size="2">本文依照HIBERNATE帮助文档，一些网络书籍及项目经验整理而成，只提供要点和思路，具体做法可以留言探讨，或是找一些更详细更有针对性的资料。 </font>
		</h1>
		<div class="post">
				<div class="postcontent">
						<p>
								<font size="2">　　初用HIBERNATE的人也许都遇到过性能问题，实现同一功能，用HIBERNATE与用JDBC性能相差十几倍很正常，如果不及早调整，很可能影响整个项目的进度。</font>
						</p>
						<p>
								<font size="2">　　大体上，对于HIBERNATE性能调优的主要考虑点如下:</font>
						</p>
						<p>
								<font size="2">　　Ø 数据库设计调整</font>
						</p>
						<p>
								<font size="2">　　Ø HQL优化</font>
						</p>
						<p>
								<font size="2">　　Ø API的正确使用(如根据不同的业务类型选用不同的集合及查询API)</font>
						</p>
						<p>
								<font size="2">　　Ø 主配置参数(日志，查询缓存，fetch_size, batch_size等)</font>
						</p>
						<p>
								<font size="2">　　Ø 映射文件优化(ID生成策略，二级缓存，延迟加载，关联优化)</font>
						</p>
						<p>
								<font size="2">　　Ø 一级缓存的管理</font>
						</p>
						<p>
								<font size="2">　　Ø 针对二级缓存，还有许多特有的策略</font>
						</p>
						<p>
								<font size="2">　　Ø 事务控制策略。</font>
						</p>
						<p>
								<font size="2">　　1、 数据库设计</font>
						</p>
						<p>
								<font size="2">　　a) 降低关联的复杂性</font>
						</p>
						<p>
								<font size="2">　　b) 尽量不使用联合主键</font>
						</p>
						<p>
								<font size="2">　　c) ID的生成机制，不同的数据库所提供的机制并不完全一样</font>
						</p>
						<p>
								<font size="2">　　d) 适当的冗余数据，不过分追求高范式</font>
						</p>
						<p>
								<font size="2">　　2、 HQL优化</font>
						</p>
						<p>
								<font size="2">　　HQL如果抛开它同HIBERNATE本身一些缓存机制的关联，HQL的优化技巧同普通的SQL优化技巧一样，可以很容易在网上找到一些经验之谈。</font>
						</p>
						<p>
								<font size="2">　　3、 主配置</font>
						</p>
						<p>
								<font size="2">　　a) 查询缓存，同下面讲的缓存不太一样，它是针对HQL语句的缓存，即完全一样的语句再次执行时可以利用缓存数据。但是，查询缓存在一个交易系统(数据变更频繁，查询条件相同的机率并不大)中可能会起反作用:它会白白耗费大量的系统资源但却难以派上用场。</font>
						</p>
						<p>
								<font size="2">　　b) fetch_size，同JDBC的相关参数作用类似，参数并不是越大越好，而应根据业务特征去设置</font>
						</p>
						<p>
								<font size="2">　　c) batch_size同上。</font>
						</p>
						<p>
								<font size="2">　　d) 生产系统中，切记要关掉SQL语句打印。</font>
						</p>
						<p>
								<font size="2">　　4、 缓存</font>
						</p>
						<p>
								<font size="2">　　a) 数据库级缓存:这级缓存是最高效和安全的，但不同的数据库可管理的层次并不一样，比如，在ORACLE中，可以在建表时指定将整个表置于缓存当中。</font>
						</p>
						<p>
								<font size="2">　　b) SESSION缓存:在一个HIBERNATE SESSION有效，这级缓存的可干预性不强，大多于HIBERNATE自动管理，但它提供清除缓存的方法，这在大批量增加/更新操作是有效的。比如，同时增加十万条记录，按常规方式进行，很可能会发现OutofMemeroy的异常，这时可能需要手动清除这一级缓存:Session.evict以及Session.clear</font>
						</p>
						<p>
								<font size="2">　　c) 应用缓存:在一个SESSIONFACTORY中有效，因此也是优化的重中之重，因此，各类策略也考虑的较多，在将数据放入这一级缓存之前，需要考虑一些前提条件:</font>
						</p>
						<p>
								<font size="2">　　i. 数据不会被第三方修改(比如，是否有另一个应用也在修改这些数据?)</font>
						</p>
						<p>
								<font size="2">　　ii. 数据不会太大</font>
						</p>
						<p>
								<font size="2">　　iii. 数据不会频繁更新(否则使用CACHE可能适得其反)</font>
						</p>
						<p>
								<font size="2">　　iv. 数据会被频繁查询</font>
						</p>
						<p>
								<font size="2">　　v. 数据不是关键数据(如涉及钱，安全等方面的问题)。</font>
						</p>
						<p>
								<font size="2">　　缓存有几种形式，可以在映射文件中配置:read-only(只读，适用于很少变更的静态数据/历史数据)，nonstrict-read-write，read-write(比较普遍的形式，效率一般)，transactional(JTA中，且支持的缓存产品较少)</font>
						</p>
						<p>
								<font size="2">　　d) 分布式缓存:同c)的配置一样，只是缓存产品的选用不同，在目前的HIBERNATE中可供选择的不多，oscache, jboss cache，目前的大多数项目，对它们的用于集群的使用(特别是关键交易系统)都持保守态度。在集群环境中，只利用数据库级的缓存是最安全的。</font>
						</p>
						<p>
								<font size="2">　　5、 延迟加载</font>
						</p>
						<p>
								<font size="2">　　a) 实体延迟加载:通过使用动态代理实现</font>
						</p>
						<p>
								<font size="2">　　b) 集合延迟加载:通过实现自有的SET/LIST，HIBERNATE提供了这方面的支持</font>
						</p>
						<p>
								<font size="2">　　c) 属性延迟加载:</font>
						</p>
						<p>
								<font size="2">　　6、 方法选用</font>
						</p>
						<p>
								<font size="2">　　a) 完成同样一件事，HIBERNATE提供了可供选择的一些方式，但具体使用什么方式，可能用性能/代码都会有影响。显示，一次返回十万条记录(List/Set/Bag/Map等)进行处理，很可能导致内存不够的问题，而如果用基于游标(ScrollableResults)或Iterator的结果集，则不存在这样的问题。</font>
						</p>
						<p>
								<font size="2">　　b) Session的load/get方法，前者会使用二级缓存，而后者则不使用。</font>
						</p>
						<p>
								<font size="2">　　c) Query和list/iterator，如果去仔细研究一下它们，你可能会发现很多有意思的情况，二者主要区别(如果使用了Spring，在HibernateTemplate中对应find,iterator方法):</font>
						</p>
						<p>
								<font size="2">　　i. list只能利用查询缓存(但在交易系统中查询缓存作用不大)，无法利用二级缓存中的单个实体，但list查出的对象会写入二级缓存，但它一般只生成较少的执行SQL语句，很多情况就是一条(无关联)。</font>
						</p>
						<p>
								<font size="2">　　ii. iterator则可以利用二级缓存，对于一条查询语句，它会先从数据库中找出所有符合条件的记录的ID，再通过ID去缓存找，对于缓存中没有的记录，再构造语句从数据库中查出，因此很容易知道，如果缓存中没有任何符合条件的记录，使用iterator会产生N+1条SQL语句(N为符合条件的记录数)</font>
						</p>
						<p>
								<font size="2">　　iii. 通过iterator，配合缓存管理API，在海量数据查询中可以很好的解决内存问题，如:</font>
						</p>
						<p>
								<font size="2">　　while(it.hasNext()){</font>
						</p>
						<p>
								<font size="2">　　YouObject object = (YouObject)it.next();</font>
						</p>
						<p>
								<font size="2">　　session.evict(youObject);</font>
						</p>
						<p>
								<font size="2">　　sessionFactory.evice(YouObject.class, youObject.getId());</font>
						</p>
						<p>
								<font size="2">　　}</font>
						</p>
						<p>
								<font size="2">　　如果用list方法，很可能就出OutofMemory错误了。</font>
						</p>
						<p>
								<font size="2">　　iv. 通过上面的说明，我想你应该知道如何去使用这两个方法了。</font>
						</p>
						<p>
								<font size="2">　　7、 集合的选用</font>
						</p>
						<p>
								<font size="2">　　在HIBERNATE 3.1文档的“19.5. Understanding Collection performance”中有详细的说明。</font>
						</p>
						<p>
								<font size="2">　　8、 事务控制</font>
						</p>
						<p>
								<font size="2">　　事务方面对性能有影响的主要包括:事务方式的选用，事务隔离级别以及锁的选用</font>
						</p>
						<p>
								<font size="2">　　a) 事务方式选用:如果不涉及多个事务管理器事务的话，不需要使用JTA，只有JDBC的事务控制就可以。</font>
						</p>
						<p>
								<font size="2">　　b) 事务隔离级别:参见标准的SQL事务隔离级别</font>
						</p>
						<p>
								<font size="2">　　c) 锁的选用:悲观锁(一般由具体的事务管理器实现)，对于长事务效率低，但安全。乐观锁(一般在应用级别实现)，如在HIBERNATE中可以定义VERSION字段，显然，如果有多个应用操作数据，且这些应用不是用同一种乐观锁机制，则乐观锁会失效。因此，针对不同的数据应有不同的策略，同前面许多情况一样，很多时候我们是在效率与安全/准确性上找一个平衡点，无论如何，优化都不是一个纯技术的问题，你应该对你的应用和业务特征有足够的了解。</font>
						</p>
						<p>
								<font size="2">　　9、 批量操作</font>
						</p>
						<p>
								<font size="2">　　即使是使用JDBC，在进行大批数据更新时，BATCH与不使用BATCH有效率上也有很大的差别。我们可以通过设置batch_size来让其支持批量操作。</font>
						</p>
						<p>
								<font size="2">　　举个例子，要批量删除某表中的对象，如“delete Account”，打出来的语句，会发现HIBERNATE找出了所有ACCOUNT的ID，再进行删除，这主要是为了维护二级缓存，这样效率肯定高不了，在后续的版本中增加了bulk delete/update，但这也无法解决缓存的维护问题。也就是说，由于有了二级缓存的维护问题，HIBERNATE的批量操作效率并不尽如人意!</font>
						</p>
						<p>
								<font size="2">　　从前面许多要点可以看出，很多时候我们是在效率与安全/准确性上找一个平衡点，无论如何，优化都不是一个纯技术的问题，你应该对你的应用和业务特征有足够的了解，一般的，优化方案应在架构设计期就基本确定，否则可能导致没必要的返工，致使项目延期，而作为架构师和项目经理，还要面对开发人员可能的抱怨，必竟，我们对用户需求更改的控制力不大，但技术/架构风险是应该在初期意识到并制定好相关的对策。</font>
						</p>
						<p>
								<font size="2">　　还有一点要注意，应用层的缓存只是锦上添花，永远不要把它当救命稻草，应用的根基(数据库设计，算法，高效的操作语句，恰当API的选择等)才是最重要的。</font>
						</p>
				</div>
		</div>
<img src ="http://www.blogjava.net/wyz191/aggbug/104858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-03-20 08:15 <a href="http://www.blogjava.net/wyz191/articles/104858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 学习小结 </title><link>http://www.blogjava.net/wyz191/articles/95342.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Mon, 22 Jan 2007 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/95342.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/95342.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/95342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/95342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/95342.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、PO的数据类型设置						int 还是Integer Integer 允许为 null Hibernate 既可以访问Field也可以访问Property，访问Property是只是调用getXXX()、setXXX()方法，因此在from Customer where c.name=’Tom’ HQL中，name属性不需要存在，只要getName()存在就可以了。				...&nbsp;&nbsp;<a href='http://www.blogjava.net/wyz191/articles/95342.html'>阅读全文</a><img src ="http://www.blogjava.net/wyz191/aggbug/95342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-22 15:11 <a href="http://www.blogjava.net/wyz191/articles/95342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>