`
lycjt
  • 浏览: 32671 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate 主键自增长

 
阅读更多
今天突然发现了一个问题,用Hibernate的save方法保存数据的时候发现主键没有报错,插不进去。然来记得不用我去自动生成主键的,研究了一下,发现然来都是其它同事都弄好了,对这个自增长主键进行总结了一下:
  目前发现有两种方法:
            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;
}

注意:@GeneratedValue中的generator不是sequence的名字,而是@SequenceGenerator中的name的名字;@SequenceGenerator中的sequenceName才是定义sequence的名字。

第二种:
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为名称SEQ_INF_BUSINESS_APPOINTDRAW

对这个的总结不知道有没有用,先留着吧,呵呵
分享到:
评论

相关推荐

    Hibernate主键生成方式

    以下是关于Hibernate主键生成方式的详细说明: 1. **Identity方式**:`&lt;generator class="identity"/&gt;` 这种方式依赖于数据库自身的自动增长机制。例如,在MySQL中,它可以与`AUTO_INCREMENT`属性配合使用。当...

    常用Hibernate主键生成策略

    ### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...

    hibernate主键生成策略

    【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...

    hibernate中自动生成主键的办法

    综上所述,Hibernate提供了丰富的主键生成策略,涵盖了从简单的自动增长到复杂的分布式唯一ID生成。开发者应根据具体的应用需求和数据库特性,选择最合适的主键生成策略,以确保系统的稳定性和性能。无论是追求高...

    Hibernate主键生成策略

    ### Hibernate主键生成策略 #### 一、概述 在Hibernate框架中,主键生成策略是对象持久化过程中不可或缺的一部分。合理的主键生成机制不仅能够确保数据的唯一性,还能够提高系统的性能和可扩展性。本文将详细介绍...

    Hibernate主键类型说明和配置手册.doc

    以下是对Hibernate主键类型及其配置的详细说明: 1. **uuid.hex**: 这种生成器使用128位算法生成一个32位的字符串。由于其通用性,它适用于所有类型的数据库。在`.hbm.xml`映射文件中,你可以这样配置: ```xml ...

    hibernate的主键生成策略

    以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate不参与主键的生成,这意味着主键生成完全由应用控制,可以与数据库无关。这种...

    Hibernate映射文件主键的生成

    以上就是Hibernate主键生成的常见策略,每种策略都有其适用的场景。在实际开发中,应根据数据库类型和需求选择合适的主键生成策略,确保数据的一致性和完整性。理解并正确配置这些策略,将有助于提高程序的稳定性和...

    在hibernate中实现oracle的自动增长

    本文将深入探讨如何在Hibernate中实现Oracle数据库的自动增长特性,这一功能对于确保数据表中的主键唯一性至关重要。 ### Oracle数据库的自动增长机制 Oracle数据库提供了强大的序列(sequence)功能来支持自动增长...

    Hibernate主键生成

    在Java持久化框架Hibernate中,主键生成策略是至关重要的,因为它决定了如何为数据库表的记录生成唯一的标识符。主键生成器确保了每个记录都有一个独一无二的标识,这对于数据的完整性至关重要。以下是Hibernate中...

    Java探索之Hibernate主键生成策略详细介绍

    Hibernate主键生成策略详细介绍 在Java探索中,Hibernate提供了多种主键生成策略,满足不同场景下的需求。下面是对Hibernate主键生成策略的详细介绍: 1. Increment主键生成策略 Increment主键生成策略是由...

    Hibernate自动生成配置文件

    在向导中,配置Hibernate的实体类名称、包名等信息,然后指定主键生成策略,比如可以选用“identity”表示由数据库自动生成主键。点击“Next”和“Finish”,MyEclipse会自动生成对应的Hibernate配置文件(`...

    持久化类主键生成策略+例子

    ### Hibernate主键生成策略 1. **`native`**:类似于JPA的`GenerationType.AUTO`,根据底层数据库选择合适的生成策略。 2. **`identity`**:相当于JPA的`GenerationType.IDENTITY`,适合自动增长主键的数据库。 3...

    hibernate应用[包括示例,映射,主键自增,各种查询操作方式以及配置文档以及 Annotation示例]

    3. **主键自增**:Hibernate提供了多种主键生成策略,包括自动增长(Identity)、序列(Sequence)等,这些策略确保了每个新创建的对象都有一个唯一的标识。 4. **查询操作**:这包括了HQL(Hibernate Query ...

    Hibernate学习笔记整理

    * Identity:支持主键自动增长 * Uuid:持久化类中的属性必须是 String 类型 * Native:Hibernate 会根据数据库的不同,选择合适的主键的生成策略 Sequence * 是 oracle 内部特有的内容,相当于 uuid,所以是字符...

    Hibernate一对一单向外键关联 (联合主键annotation)

    3. 最后,定义`Person`实体,主键是常规的自动增长ID,但包含对`Passport`的引用: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType;...

Global site tag (gtag.js) - Google Analytics