1. 程式人生 > >hibernate oracle主鍵自增長中sequence跳號無序的問題

hibernate oracle主鍵自增長中sequence跳號無序的問題

1. 配置序列產生器相關屬性

hibernate註解設定資料庫主鍵自增長時,如果oracle表中的主鍵ID沒有按照正常的sequence自增長(+1)存入資料庫。可以在序列產生器中加上allocationSize(步長)屬性的設定,即:在@SequenceGenerator中加入allocationSize = 1就可以了

 例子如下:

 @Id
	@SequenceGenerator(name="cat_id_seq",sequenceName="cat_id_seq",allocationSize=1,initialValue=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="cat_id_seq")
	@Column(name="id")
	private Integer id;

2. @SequenceGenerator 相關屬性:

屬性                             是否必需                  說明 name                               必需                       必須匹配startegySEQUENCEGeneratedValue 的名稱

allocationSize    可選           預設值: 50

initialValue      可選           預設值: 0

sequenceName      可選           預設值

: JPA 持續性提供程式分配它自己建立的序列名

3. 實際操作中出現的問題 (1)每次更改allocationSize屬性後,第一次插入資料庫的主鍵ID是隨機的,如:改allocationSize = 10,執行一次程式,ID起始值變成了40,如圖: 再改成allocationSize = 1,再提交資料,ID起始值又變成了5,如圖: 改成其他值時也是又是隨機的起始值,若不改動allocationSize,則是正常的自增,每一次的起始值也是接著上一次的。不知道這是什麼原因。 (2)initialValue=1這個屬性設定為多少,好像每次都不影響ID的初始值,好像沒起作用,例如:改為initialValue=100
,提交資料後,資料庫顯示的ID還是從1開始,還是按照oracle中cat_id_seq中設定的起始值minValue和nextNumber來進行,如圖: 不知是怎麼回事。

相關推薦

hibernate oracle增長sequence無序的問題

1. 配置序列產生器相關屬性 hibernate註解設定資料庫主鍵自增長時,如果oracle表中的主鍵ID沒有按照正常的sequence自增長(+1)存入資料庫。可以在序列產生器中加上allocationSize(步長)屬性的設定,即:在@SequenceGenerator

MySQL 和 Oracle 增長

pos tom 速度 mage hone class 緩沖 開始 www 1、MySQL 1)建表 auto_increment:每插入一條數據,客戶表(customers)的主鍵id就自動增1,如下所示 1 create table customers --

mycat 增長 即全域性序列

server.xml<property name="sequnceHandlerType">0</property>採用本地檔案配置的方式1.6 官方文件 寫:缺點:在 MyCA

向Mysql增長添加數據並返回

lec rom sele ast 其中 添加 select insert 查詢 表level,其主鍵為lid 1.select max(id) from table   查詢語句:SELECT MAX(lid) FROM LEVEL        返回插入主鍵 2.sel

mybatis+oracle實現增長的幾種方式

1、使用selectKey標籤 <insert id="addLoginLog" parameterType="map" > <selectKey keyProperty="id" resultType="int" order="BEFORE"> se

Oracle 設定增長__Oracle

轉自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle資料庫裡實現資料表主鍵自增,我們似乎沒有辦法像MySql般直接定義列的屬性來實現。不過對於這個資料庫的常用功能,我們還是有辦法實現的。這裡將展示使用觸發器來實現主鍵自增。 1.準備 建立UserIn

mybatis+mysql/oracle 資料庫批量插入,增長

1 mybatis+oracle <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 --> <dependency> <groupId>com.oracle&

oracle建立表並新增,設定增長

oracle序列詳解和建立自增主鍵 Oracle序列主鍵 序列: 是oacle提供的用於產生一系列唯一數字的資料庫物件。 l 自動提供唯一的數值 l 共享物件 l 主要用於提供主鍵值

MyBatis+Oracle實現增長的幾種常用方式

在最近做專案中,SSM框架+Oracle資料庫,遇到前臺沒有傳遞主鍵值,需要在插入資料的時候實現主鍵自增長,因為oracle沒有如同SqlServer和mysql一樣的主鍵自增長的設計,所以只能迂迴實

更新oracle資料庫表如何實現增長

        在資料庫中實現主鍵自動增長有利於我們做資料插入操作,在SQL SERVER上建立表時可以在int型別的欄位後加上identity(1,1),該欄位就會從1開始,按照+1的方式自增,將這個欄位設定為主鍵。MySql中可以使用“auto_increment

Mybatis操作數據庫實現增長

ddr before from add parameter 觸發器 sel 自動 博客 (一)oracle中沒有主鍵自增長,所有可以通過創建序列或使用觸發器實現 1.先創建表 CREATE TABLE USER1 ( ID NUMBER(1

mysql非增長

blog nta tro border 查看 code cnblogs ref font mysql並非只有主鍵才能自增長,而是設為鍵的列就可以設置自增長。 如下: 1 2 3 4 CREATE TABLE t1 ( id INT, co

建立一張Oracle增和帶有預設值的資料表

0 在建立表前修改一下系統預設時間格式 alter session set nls_date_format = 'yyyy-mm-dd'; 1 建立一個表 CREATE TABLE user_record( ID NUMBER(11) NOT NULL PRIMA

Oracle

har bubuko tid varchar2 min new add info replace 1、創建table 1 CREATE TABLE demo6 2 ( 3 id INT NOT NULL, 4 key1 VARCHAR2(40)

SQLite 增長,插入後返回ID資訊

SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into person(name,phone,amount) values(?,?,?) ", new Object[]{perso

Mybatis 操作資料庫的增長 Mybatis 操作資料庫的增長

轉自:https://www.cnblogs.com/panie2015/p/5807683.html Mybatis 操作資料庫的主鍵自增長   本篇文章將研究mybatis 實現oracle主鍵自增的機制   首先我們看對於同一張student表,

實現oracle

有一個表aline,主鍵為objectid create sequence SEQ_Userinf start with 1 increment by 1 nomaxvalue nominvalue nocache; CREATE OR REPLACE TRIGGER tg_test BEF

PowerDesigner16如何實現增長

背景 網上的做法都是先將概念資料模型轉換為物理資料模型,然後雙擊主鍵欄位,選中identity。 這種做法是正確的,然而有些情況下,不做相關設定的前提下,我們這批新手會找不到identity選項,網

SQL Server設定增長列(使用sql語句實現)

Declare @Pk varChar(100);  Select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('tb') and xtype='PK';  if @Pk is not null exec('Alter table tb Drop

oracle增 建立多個觸發器

問題: 最近修改專案的sql指令碼,新增幾張表,其中三個表需要屬性自增,mySql中可以直接用AUTO_INCREMENT,oracle沒有做自增功能,需要手動寫觸發器實現自增功能。在網上找到了解決方案。貼出來供大家參考: 解決方案:1.首先建立表 CREATE TABL