目前發現有兩種方法:
1,通過註解的方式,利用數據庫裏面創建的sequence自動增長
2,通過寫一個spring的OracleSequenceMaxValueIncrementer 類調用sequence 自增長。
第一種:hibernate用註解(annotation)配置sequence
@SequenceGenerator(name="sequenceGenerator",sequenceName="SEQ_INF_BUSINESS_APPOINTDRAW")
@GeneratedValue(generator="sequenceGenerator",strategy=GenerationType.SEQUENCE)
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
[color=red]注意:@GeneratedValue中的generator不是sequence的名字,而是@SequenceGenerator中的name的名字;@SequenceGenerator中的sequenceName纔是定義sequence的名字。[/color]
第二種:
spring配置文件中配置:
<!-- 提供普java類獲取spring上下文 通過上下文獲取具體bean,調用其中的方法 -->
<bean id="springApplicationContextUtil" class="com.tienon.hfms.common.SpringApplicationContextUtil" lazy-init="false"></bean>
<!-- 根據Oracle數據庫序列獲取NEXTVAL 值從1開始到99999999999 -->
<bean id="oracleSequenceGenerator"
class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer">
<property name="dataSource" ref="dataSource" />
<property name="incrementerName">
<value>SEQ_INF_BUSINESS_APPOINTDRAW</value>
</property>
</bean>
springApplicationContextUtil.java
package com.tienon.hfms.common;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* @Description:提供供普通java類獲取spring上下文 通過上下文獲取具體bean,調用其中的方法。
* @Copyright: Copyright 2011 ShenZhen DSE Corporation
* @Company: 科技有限公司
* @author: liulm
* @Date: 2011-5-17
* @version 1.0
*/
public class SpringApplicationContextUtil implements ApplicationContextAware {
private SpringApplicationContextUtil(){}
//聲明一個靜態變量保存
private static ApplicationContext context;
@SuppressWarnings("static-access")
public void setApplicationContext(ApplicationContext context)throws BeansException {
this.context = context;
}
public static ApplicationContext getContext(){
return context;
}
public static Object getBean(String beanName){
if (StringUtils.isEmpty(beanName)) {
return null;
}
return getContext().getBean(StringUtils.trim(beanName));
}
}
生成主鍵的方法:
public static Long getOracleSequence() {
// OracleSequenceMaxValueIncrementer seq = (OracleSequenceMaxValueIncrementer)SpringUtil.getBean("oracleSequenceGenerator");
ApplicationContext context = SpringApplicationContextUtil.getContext();
OracleSequenceMaxValueIncrementer seq = (OracleSequenceMaxValueIncrementer) context.getBean("oracleSequenceGenerator");
return seq.nextLongValue();
}
這兩個方法的前提是都必須在數據庫中配置sequence爲名稱[color=red]SEQ_INF_BUSINESS_APPOINTDRAW[/color]
對這個的總結不知道有沒有用,先留着吧,呵呵