Hibernate与Oracle应用之主键生成

来源:互联网 发布:淘宝寄到澳洲 编辑:程序博客网 时间:2024/03/29 08:41
在用Hibernate应用生成代理主键时,如果没有配置主键生成具体使用哪个sequence,则Hibernate会自动创建一个默认sequence,此时,如果我们的系统中仅仅只有一张表,那就无所谓了,这篇文章也就没有了存在的意义。但是事实上对一个应用来说,我们根本不可能用一张表实现所有的系统应用功能,因此,如果这时候我们将应用中的sequence都在Hibernate映射文件中配置成默认的序列,那么问题就来了,由于sequence在进行取值的过程中是nextval方式,也就是说每张表都要获取nextval,这样势必会造成表中数据的主键不连续,出现断层的情况,而且这种断层是不可预料的,没有规律的,根据应用的使用情况随机变化的。这样,如果在一个系统中有成百上千张表,而每张表都使用同一个sequence生成主键。那么,用不了多久,我们定义的sequence就不能够满足应用的需求。反应在应用系统中,那就是程序的功能崩溃。
 
 
为了避免出现这种情况,建议在定义对象-映射文件时就明确指明使用哪个sequence,具体做法如下:

打开对象-映射文件,找到代理主键
xml 代码
  1. <id name="id" column="EVENT_ID">  
  2.    <generator class="sequence"/>  
  3. </id>  

 

修改后的内容如下:

xml 代码
  1. <id name="id" column="EVENT_ID">  
  2.  <generator class="sequence">  
  3.   <param name="sequence">HIBERNATE_SEQ_EVENT</param>  
  4.  </generator>  
  5. </id>  


接下来使用ant清理工程:
xml 代码
  1. <property name="build.dir" value="${web.dir}/WEB-INF/classes" />  
  2. <target name="clean" description="Clean output directories">  
  3.     <delete>  
  4.         <fileset dir="${build.dir}">  
  5.             <include name="**/*.class" />  
  6.             <include name="**/*.xml" />  
  7.             <include name="**/*.properties" />  
  8.         </fileset>  
  9.     </delete>  
  10. </target>  


重新复制资源文件:
xml 代码
  1. <property name="src.dir" value="src" />  
  2. <target name="prepare">  
  3.     <mkdir dir="${build.dir}" />  
  4.     <copy todir="${build.dir}">  
  5.         <fileset dir="${src.dir}">  
  6.             <!-- <include name="**/*.properties" /> -->  
  7.             <include name="**/*.hbm.xml" />  
  8.         </fileset>  
  9.     </copy>  
  10.     <copy todir="${build.dir}">  
  11.         <fileset dir="${src.dir}">  
  12.             <include name="**/*.cfg.xml" />  
  13.             <include name="**/*.properties" />  
  14.         </fileset>  
  15.     </copy>  
  16. </target>  




编译工程:
xml 代码
  1. <target name="build" depends="prepare" description="">  
  2.     <javac destdir="${build.dir}" target="1.5" debug="true" deprecation="false" optimize="false" failonerror="false">  
  3.         <src path="${src.dir}" />  
  4.         <classpath refid="master-classpath" />  
  5.     </javac>  
  6. </target>  


运行程序:
xml 代码
  1. <path id="client.class.path">  
  2.     <fileset dir="${web.dir}/WEB-INF/lib">  
  3.         <include name="*.jar" />  
  4.     </fileset>  
  5.     <pathelement location="${build.dir}/classes" />  
  6. </path>  
  7. <target name="run.client" depends="build">  
  8.     <java classname="events.EventManager" classpathref="master-classpath">  
  9.         <classpath refid="client.class.path" />  
  10.     </java>  
  11. </target>  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发出油多脱发怎么办 头发出油掉头发怎么办 在英国狂掉头发怎么办 我头发油头皮痒脱发怎么办 油性头发容易掉发怎么办 洗了头发很蓬松怎么办 小孩头皮黄掉头发怎么办 头发又油又掉发怎么办 英国的水掉头发怎么办 洗发为什么会掉头发怎么办 头发老掉怎么办吃什么 19岁掉头发严重怎么办 头发总是从根掉怎么办 18岁掉头发很厉害怎么办 20岁脱发严重该怎么办 22岁m型脱发严重怎么办 22掉头发很厉害怎么办 哺乳期头发掉的很厉害怎么办 失眠多梦掉头发怎么办 老婆生完孩子掉头发怎么办 16岁发际线高怎么办 生了小孩头发掉怎么办 16岁头发掉的厉害怎么办 经常脱发严重不长头发怎么办 产后3年一直脱发怎么办 生完宝宝头发掉怎么办 生完小孩掉好多头发怎么办 脱发头发掉的厉害怎么办 宝宝四个月妈妈掉头发怎么办 产后四个月掉头发怎么办 洗头时严重掉发怎么办 头发老是掉得到处都是怎么办 短发洗完头头发向外外怎么办 20岁掉头发厉害怎么办 20岁老掉头发怎么办 20岁有点掉头发怎么办 20岁开始掉头发怎么办 20岁掉头发严重怎么办 20岁脱发很严重怎么办 手的纹路很深怎么办 20岁白头发很多怎么办