﻿<?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-陌上花开-随笔分类-oracle</title><link>http://www.blogjava.net/f6k66ve/category/44183.html</link><description>遇高山，我御风而翔，逢江河，我凌波微波</description><language>zh-cn</language><lastBuildDate>Thu, 04 Mar 2010 04:07:19 GMT</lastBuildDate><pubDate>Thu, 04 Mar 2010 04:07:19 GMT</pubDate><ttl>60</ttl><item><title>oracle 自动增长列</title><link>http://www.blogjava.net/f6k66ve/archive/2010/03/04/314497.html</link><dc:creator>askzs</dc:creator><author>askzs</author><pubDate>Thu, 04 Mar 2010 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/f6k66ve/archive/2010/03/04/314497.html</guid><wfw:comment>http://www.blogjava.net/f6k66ve/comments/314497.html</wfw:comment><comments>http://www.blogjava.net/f6k66ve/archive/2010/03/04/314497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/f6k66ve/comments/commentRss/314497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/f6k66ve/services/trackbacks/314497.html</trackback:ping><description><![CDATA[SQL SERVER 和 ACCESS 以及 MYSQL 中， 都有一种自增字段， 通常被用来做主键或索引键， 但是 ORACLE 中，确并没有提供这种功能 ，但我们确经常需要这个功能，可以用以下方法解决，<br />
一，如果你不在集群环境下使用，并且用到了hibernate，那么可以用hibernate提供的产生自动增长类型主键的increment策略,如下<br />
在**.hbm.xml（hibernate映射文件）中配置如下 <br />
&lt;class name="com.xx.xx.Test" table="TEST"&gt; <br />
&lt;id name="id" type="int" column="ID"&gt; <br />
//该句指定使用hibernate自带的increment策略生成主键 <br />
&lt;generator class="increment"/&gt; <br />
&lt;/id&gt; <br />
&lt;property name="uname" type="java.lang.String" column="UNAME"/&gt; <br />
&lt;/class&gt;<br />
这样，在java文件中对表增加记录时，只需添加除ID外的其他字段，然后save即可，<br />
注意 ，increment 实现机制为在当前应用实例中维持一个变量，以保存着当前的最大值，之后每次需要生成主键的时候将此值加1作为主键，<span style="color: #ff0000">increment不能在集群环境下使用</span>，<br />
<br />
二，使用hibernate的sequence策略，在oracle中新建一个sequence，在hibernate中使用，如下<br />
在**.hbm.xml（hibernate映射文件）中配置如下 <br />
&lt;class name="com.xx.xx.Test" table="TEST"&gt; <br />
&lt;id name="id" type="int" column="ID"&gt; <br />
//该句指定使用hibernate自带的sequence策略生成主键 ,TEST_SEQ是在数据库中新建的sequence的名称<br />
&lt;generator class="sequence"&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="sequence"&gt;TEST_SEQ&lt;/param&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/generator&gt;&nbsp;&nbsp;&nbsp;<br />
&lt;property name="uname" type="java.lang.String" column="UNAME"/&gt; <br />
&lt;/class&gt;<br />
这样，在java文件中对表增加记录时，只需添加除ID外的其他字段，然后save即可，<br />
<br />
三，以上两种方法都是通过hibernate实现的，下面给出ORACLE的一种实现方式<br />
<p>&nbsp;1. 建立 SEQUENCE <br />
CREATE [ OR REPLACE ] SEQUENCE sequence_identity START WITH initial seed INCREMENT BY step MAXVALUE upper bound [NOMAXVALUE] NOCYCLE [empty] <br />
2. 建立 TRIGGER <br />
CREATE [ OR REPLACE ] TRIGGER trigger_identity BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT sequence_identity.NEXTVAL INTO :new.column_name FROM DUAL; END; <br />
这样，在java文件中对表增加记录时，只需添加除ID外的其他字段，然后save即可，</p>
<img src ="http://www.blogjava.net/f6k66ve/aggbug/314497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/f6k66ve/" target="_blank">askzs</a> 2010-03-04 11:36 <a href="http://www.blogjava.net/f6k66ve/archive/2010/03/04/314497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>