<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>四季如風 &#187; Hibernate</title>
	<atom:link href="http://www.hjide.com/category/hibernate/feed" rel="self" type="application/rss+xml" />
	<link>http://www.hjide.com</link>
	<description>每一天我們都在進步</description>
	<lastBuildDate>Wed, 08 Feb 2012 13:48:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>hibernate映射数据库表如何使表中字段默认值生效</title>
		<link>http://www.hjide.com/article/169.htm</link>
		<comments>http://www.hjide.com/article/169.htm#comments</comments>
		<pubDate>Mon, 22 Jan 2007 10:33:18 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=169</guid>
		<description><![CDATA[问题描述： &#160; &#160;hibernate技术中对应数据库中每一个表，都会有一个映射文件与之对应，此文件描述数据库表中每一个字段的类型、长度、是否可空等属性。在进行表中记录的插入（更新）操作时，hibernate会根据映射文件中的描述自动生成一个包含所有字段的插入（更新）sql语句，此时如果映射文件中某字段的值为空(NULL)而其在数据库表中定义的默认值不为空，hibernate会将空值插入到表中，而不会使用此字段的默认值。解决方法： &#160; &#160;在hibernate映射文件对数据库表的描述中，加入dynamic-insert=&#34;true&#34;和 dynamic-update=&#34;true&#34; 语句，这时hibernate在进行插入（更新）操作时，只会为那些值不为空的字段赋值，而值为空的字段就会使用数据库表中定义的默认值了。举例说明：表person:CREATE TABLE person ( &#160;i_id int(11) NOT NULL auto_increment, &#160;c_name varchar(100) NOT NULL default &#039;张三&#039;, &#160;PRIMARY KEY &#160;(id)) person.hbm.xml:&#60;hibernate-mapping package=&#34;cn.com.lough.model&#34;&#62; &#160; &#160;&#60;class &#160; &#160; &#160; &#160;name=&#34;Person&#34; &#160; &#160; &#160; &#160;table=&#34;person&#34; &#160; &#160; &#160; &#160;lazy=&#34;false&#34; &#160; &#160;&#62; &#160; &#160; &#160; &#160;&#60;meta attribute=&#34;sync-DAO&#34;&#62;true&#60;/meta&#62; &#160; &#160; &#160; &#160;&#60;cache usage=&#34;read-write&#34;/&#62; &#160; &#160; &#160; [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/169.htm/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hibernate 3.2 参考手册中文版CHM文件下载</title>
		<link>http://www.hjide.com/article/138.htm</link>
		<comments>http://www.hjide.com/article/138.htm#comments</comments>
		<pubDate>Thu, 04 Jan 2007 07:00:36 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[下载]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=138</guid>
		<description><![CDATA[Hibernate 3.2 参考手册中文版下载文件已经改为chm的版本，压缩后比pdf大概小了100多K，嗯，比较满意。 hibernate_reference下载]]></description>
		<wfw:commentRss>http://www.hjide.com/article/138.htm/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Hibernate写入数据库时中文乱码</title>
		<link>http://www.hjide.com/article/129.htm</link>
		<comments>http://www.hjide.com/article/129.htm#comments</comments>
		<pubDate>Tue, 26 Dec 2006 14:59:07 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=129</guid>
		<description><![CDATA[insert或update时中文出现乱码的解决方法：在连接串后面加上数据库编码。&#60;property name=&#34;connection.url&#34;&#62;&#160;&#160;jdbc:mysql://localhost:3306/mysql?useUnicode=true&#38;amp;characterEncoding=utf-8&#60;/property&#62;]]></description>
		<wfw:commentRss>http://www.hjide.com/article/129.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyEclipse &#8211; Hibernate Tools DAO</title>
		<link>http://www.hjide.com/article/90.htm</link>
		<comments>http://www.hjide.com/article/90.htm#comments</comments>
		<pubDate>Sat, 04 Nov 2006 15:24:26 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=90</guid>
		<description><![CDATA[package org.jock.hibernate.model;import java.util.Date;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.hibernate.LockMode;import org.hibernate.Query;import org.hibernate.criterion.Example;/*** Data access object (DAO) for domain model class User.* @see org.jock.hibernate.model.User* @author MyEclipse &#8211; Hibernate Tools*/public class UserDAO extends BaseHibernateDAO { &#160; private static final Log log = LogFactory.getLog(UserDAO.class); &#160;//property constants &#160;public static final String FNAME = “fname”; &#160;public static final String LNAME = “lname”; &#160;public [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/90.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 24 章 最佳实践(Best Practices)</title>
		<link>http://www.hjide.com/article/30.htm</link>
		<comments>http://www.hjide.com/article/30.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:57:49 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=30</guid>
		<description><![CDATA[设计细颗粒度的持久类并且使用&#60;component&#62;来实现映射。使用一个Address持久类来封装 street, suburb, state, postcode. 这将有利于代码重用和简化代码重构(refactoring)的工作。 对持久类声明标识符属性( identifier properties)。Hibernate中标识符属性是可选的，不过有很多原因来说明你应该使用标识符属性。我们建议标识符应该是“人造”的(自动生成，不涉及业务含义)。 使用自然键(natural keys)标识对所有的实体都标识出自然键，用&#60;natural-id&#62;进行映射。实现equals()和hashCode()，在其中用组成自然键的属性进行比较。 为每个持久类写一个映射文件不要把所有的持久类映射都写到一个大文件中。把 com.eg.Foo 映射到com/eg/Foo.hbm.xml中， 在团队开发环境中，这一点显得特别有意义。 把映射文件作为资源加载把映射文件和他们的映射类放在一起进行部署。 考虑把查询字符串放在程序外面如果你的查询中调用了非ANSI标准的SQL函数，那么这条实践经验对你适用。把查询字符串放在映射文件中可以让程序具有更好的可移植性。 使用绑定变量就像在JDBC编程中一样，应该总是用占位符&#34;?&#34;来替换非常量值，不要在查询中用字符串值来构造非常量值！更好的办法是在查询中使用命名参数。 不要自己来管理JDBC connectionsHibernate允许应用程序自己来管理JDBC connections，但是应该作为最后没有办法的办法。如果你不能使用Hibernate内建的connections providers，那么考虑实现自己来实现org.hibernate.connection.ConnectionProvider 考虑使用用户自定义类型(custom type)假设你有一个Java类型，来自某些类库，需要被持久化，但是该类没有提供映射操作需要的存取方法。那么你应该考虑实现org.hibernate.UserType接口。这种办法使程序代码写起来更加自如，不再需要考虑类与Hibernate type之间的相互转换。 在性能瓶颈的地方使用硬编码的JDBCIn performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you know something is a bottleneck. And don&#039;t assume that direct [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/30.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 23 章 示例：复杂映射实例</title>
		<link>http://www.hjide.com/article/29.htm</link>
		<comments>http://www.hjide.com/article/29.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:57:13 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=29</guid>
		<description><![CDATA[本章展示了一些较为复杂的关系映射。 23.1. Employer（雇主)/Employee(雇员)下面关于Employer 和 Employee的关系模型使用了一个真实的实体类 (Employment)来表述，这是因为对于相同的雇员和雇主可能会有多个雇佣时间段。 对于金额和雇员姓名，用Components建模。 映射文件可能是这样: &#60;hibernate-mapping&#62; &#160; &#160; &#160; &#160; &#160; &#160;&#60;class name=&#34;Employer&#34; table=&#34;employers&#34;&#62; &#160; &#160; &#160; &#160;&#60;id name=&#34;id&#34;&#62; &#160; &#160; &#160; &#160; &#160; &#160;&#60;generator class=&#34;sequence&#34;&#62; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;&#60;param name=&#34;sequence&#34;&#62;employer_id_seq&#60;/param&#62; &#160; &#160; &#160; &#160; &#160; &#160;&#60;/generator&#62; &#160; &#160; &#160; &#160;&#60;/id&#62; &#160; &#160; &#160; &#160;&#60;property name=&#34;name&#34;/&#62; &#160; &#160;&#60;/class&#62; [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/29.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 22 章 示例：Weblog 应用程序</title>
		<link>http://www.hjide.com/article/28.htm</link>
		<comments>http://www.hjide.com/article/28.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:56:32 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=28</guid>
		<description><![CDATA[22.1. 持久化类下面的持久化类表示一个weblog和在其中张贴的一个贴子。他们是标准的父/子关系模型，但是我们会用一个有序包（ordered bag)而非集合(set)。 [codes=java]package eg;import java.util.List;public class Blog { &#160; &#160;private Long _id; &#160; &#160;private String _name; &#160; &#160;private List _items; &#160; &#160;public Long getId() { &#160; &#160; &#160; &#160;return _id; &#160; &#160;} &#160; &#160;public List getItems() { &#160; &#160; &#160; &#160;return _items; &#160; &#160;} &#160; &#160;public String getName() { &#160; &#160; &#160; &#160;return _name; [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/28.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 21 章 示例：父子关系(Parent Child Relationships)</title>
		<link>http://www.hjide.com/article/27.htm</link>
		<comments>http://www.hjide.com/article/27.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:55:14 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=27</guid>
		<description><![CDATA[刚刚接触Hibernate的人大多是从父子关系（parent / child type relationship）的建模入手的。父子关系的建模有两种方法。由于种种原因，最方便的方法是把Parent和Child都建模成实体类，并创建一个从Parent指向Child的&#60;one-to-many&#62;关联，对新手来说尤其如此。还有一种方法，就是将Child声明为一个&#60;composite-element&#62;（组合元素）。 事实上在Hibernate中one to many关联的默认语义远没有composite element贴近parent / child关系的通常语义。下面我们会阐述如何使用带有级联的双向一对多关联(bidirectional one to many association with cascades)去建立有效、优美的parent / child关系。这一点也不难！ 21.1. 关于collections需要注意的一点Hibernate collections被当作其所属实体而不是其包含实体的一个逻辑部分。这非常重要！它主要体现为以下几点： 当删除或增加collection中对象的时候，collection所属者的版本值会递增。 如果一个从collection中移除的对象是一个值类型(value type)的实例，比如composite element，那么这个对象的持久化状态将会终止，其在数据库中对应的记录会被删除。同样的，向collection增加一个value type的实例将会使之立即被持久化。 另一方面，如果从一对多或多对多关联的collection中移除一个实体，在缺省情况下这个对象并不会被删除。这个行为是完全合乎逻辑的－－改变一个实体的内部状态不应该使与它关联的实体消失掉！同样的，向collection增加一个实体不会使之被持久化。 实际上，向Collection增加一个实体的缺省动作只是在两个实体之间创建一个连接而已，同样移除的时候也只是删除连接。这种处理对于所有的情况都是合适的。对于父子关系则是完全不适合的，在这种关系下，子对象的生存绑定于父对象的生存周期。 21.2. 双向的一对多关系(Bidirectional one-to-many)假设我们要实现一个简单的从Parent到Child的&#60;one-to-many&#62;关联。 &#60;set name=&#34;children&#34;&#62; &#160; &#160;&#60;key column=&#34;parent_id&#34;/&#62; &#160; &#160;&#60;one-to-many class=&#34;Child&#34;/&#62;&#60;/set&#62;如果我们运行下面的代码 Parent p = &#8230;..;Child c = new Child();p.getChildren().add(c);session.save(c);session.flush();Hibernate会产生两条SQL语句： 一条INSERT语句，为c创建一条记录一条UPDATE语句，创建从p到c的连接 这样做不仅效率低，而且违反了列parent_id非空的限制。我们可以通过在集合类映射上指定not-null=&#34;true&#34;来解决违反非空约束的问题： &#60;set name=&#34;children&#34;&#62; &#160; &#160;&#60;key column=&#34;parent_id&#34; [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/27.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 20 章 工具箱指南</title>
		<link>http://www.hjide.com/article/26.htm</link>
		<comments>http://www.hjide.com/article/26.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:54:40 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=26</guid>
		<description><![CDATA[可以通过一系列Eclipse插件、命令行工具和Ant任务来进行与Hibernate关联的转换。 除了Ant任务外，当前的Hibernate Tools也包含了Eclipse IDE的插件，用于与现存数据库的逆向工程。 Mapping Editor: Hibernate XML映射文件的编辑器，支持自动完成和语法高亮。它也支持对类名和属性/字段名的语义自动完成，比通常的XML编辑器方便得多。 Console: Console是Eclipse的一个新视图。除了对你的console配置的树状概览，你还可以获得对你持久化类及其关联的交互式视图。Console允许你对数据库执行HQL查询，并直接在Eclipse中浏览结果。 Development Wizards: 在Hibernate Eclipse tools中还提供了几个向导；你可以用向导快速生成Hibernate 配置文件（cfg.xml），你甚至还可以同现存的数据库schema中反向工程出POJO源代码与Hibernate 映射文件。反向工程支持可定制的模版。 Ant Tasks: 要得到更多信息，请查阅 Hibernate Tools 包及其文档。 同时，Hibernate主发行包还附带了一个集成的工具（它甚至可以在Hibernate“内部”快速运行）SchemaExport ，也就是 hbm2ddl。 20.1. Schema自动生成（Automatic schema generation）可以从你的映射文件使用一个Hibernate工具生成DDL。 生成的schema包含有对实体和集合类表的完整性引用约束（主键和外键）。涉及到的标示符生成器所需的表和sequence也会同时生成。 在使用这个工具的时候，你必须 通过hibernate.dialet属性指定一个SQL方言(Dialet)，因为DDL是与供应商高度相关的。 首先，要定制你的映射文件，来改善生成的schema。 20.1.1. 对schema定制化(Customizing the schema)很多Hibernate映射元素定义了可选的length、precision 或者 scale属性。你可以通过这个属性设置字段的长度、精度、小数点位数。 &#60;property name=&#34;zip&#34; length=&#34;5&#34;/&#62;&#60;property name=&#34;balance&#34; precision=&#34;12&#34; scale=&#34;2&#34;/&#62;有些tag还接受not-null属性（用来在表字段上生成NOT NULL约束）和unique属性（用来在表字段上生成UNIQUE约束）。 &#60;many-to-one name=&#34;bar&#34; column=&#34;barId&#34; not-null=&#34;true&#34;/&#62;&#60;element column=&#34;serialNumber&#34; type=&#34;long&#34; not-null=&#34;true&#34; unique=&#34;true&#34;/&#62;unique-key属性可以对成组的字段指定一个唯一键约束(unique [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/26.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>第 19 章 提升性能</title>
		<link>http://www.hjide.com/article/25.htm</link>
		<comments>http://www.hjide.com/article/25.htm#comments</comments>
		<pubDate>Thu, 02 Nov 2006 14:54:06 +0000</pubDate>
		<dc:creator>Jock</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[参考手册]]></category>

		<guid isPermaLink="false">http://blog.tgb.net.cn/?p=25</guid>
		<description><![CDATA[19.1. &#160;抓取策略(Fetching strategies) 抓取策略（fetching strategy） 是指：当应用程序需要在（Hibernate实体对象图的）关联关系间进行导航的时候， Hibernate如何获取关联对象的策略。抓取策略可以在O/R映射的元数据中声明，也可以在特定的HQL 或条件查询（Criteria Query）中重载声明。 Hibernate3 定义了如下几种抓取策略： 连接抓取（Join fetching） &#8211; Hibernate通过 在SELECT语句使用OUTER JOIN（外连接）来 获得对象的关联实例或者关联集合。 查询抓取（Select fetching） &#8211; 另外发送一条 SELECT 语句抓取当前对象的关联实体或集合。除非你显式的指定lazy=&#34;false&#34;禁止 延迟抓取（lazy fetching），否则只有当你真正访问关联关系的时候，才会执行第二条select语句。 子查询抓取（Subselect fetching） &#8211; 另外发送一条SELECT 语句抓取在前面查询到（或者抓取到）的所有实体对象的关联集合。除非你显式的指定lazy=&#34;false&#34; 禁止延迟抓取（lazy fetching），否则只有当你真正访问关联关系的时候，才会执行第二条select语句。 批量抓取（Batch fetching） &#8211; 对查询抓取的优化方案， 通过指定一个主键或外键列表，Hibernate使用单条SELECT语句获取一批对象实例或集合。 Hibernate会区分下列各种情况： Immediate fetching，立即抓取 &#8211; 当宿主被加载时，关联、集合或属性被立即抓取。 Lazy collection fetching，延迟集合抓取- 直到应用程序对集合进行了一次操作时，集合才被抓取。（对集合而言这是默认行为。） &#34;Extra-lazy&#34; collection fetching,&#34;Extra-lazy&#34;集合抓取 -对集合类中的每个元素而言，都是直到需要时才去访问数据库。除非绝对必要，Hibernate不会试图去把整个集合都抓取到内存里来（适用于非常大的集合）。 Proxy fetching，代理抓取 &#8211; 对返回单值的关联而言，当其某个方法被调用，而非对其关键字进行get操作时才抓取。 [...]]]></description>
		<wfw:commentRss>http://www.hjide.com/article/25.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

