2014-07-11 3 views
0
에 대한 GenerationType 값

내 엔티티 클래스 :최대 절전 모드 : 전략 = 오라클

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="APP_INSTANCE") 
public class ApplicationEntity { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="INSTANCE_KEY") 
    private int INSTANCE_KEY; 
//other code 
} 

내 테이블 구조 :

CREATE TABLE "APP_INSTANCE" 
("INSTANCE_KEY" NUMBER NOT NULL ENABLE, 
"SYS_ID" VARCHAR2(255) , 
"NAME" VARCHAR2(255) , 
"ENV" VARCHAR2(50) , 
PRIMARY KEY ("APP_INSTANCE_KEY") ENABLE 
) 

내가 4 최대 절전 모드, 봄 3 사용하고 오라클 database.While 내 응용 프로그램 스피을 실행 오류가 발생했습니다.

03:23:07,380 INFO [STDOUT] Hibernate: insert into USER.APP_INSTANCE (SYS_ID, NAME, ENV) values (?, ?, ?) 
03:23:08,271 INFO [STDOUT] WARN : org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1400, SQLState: 23000 
03:23:08,271 INFO [STDOUT] ERROR: org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-01400: cannot insert NULL into ("USER"."APP_INSTANCE"."INSTANCE_KEY") 
03:23:08,271 INFO [STDOUT] Exception in saving.. 
03:23:08,271 ERROR [STDERR] org.hibernate.exception.ConstraintViolationException: could not execute statement 
03:23:08,271 ERROR [STDERR]  at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:74) 
03:23:08,271 ERROR [STDERR]  at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
03:23:08,271 ERROR [STDERR]  at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124) 

나는 또한 GenerationType.AUTO을 시도했지만, sequence not found입니다.

도와주세요. 그 문제는 @GeneratedValue과 관련되어 있음을 알고 있습니다. 위의 테이블 nad oracle 데이터베이스의 값을 알려주십시오.

+0

지금까지 내가 기억하는대로 GenerationType.SEQUENCE' – Athanor

+0

@Atha가'필요하므로, 오라클은 시퀀스를 사용 : 그래서 난 그냥 내가 필요로 내 개체에 GenerationType.SEQUENCE에 class.Right.DO을 GenerationType.IDENTITY를 교체해야 DB 측에서도 어떤 일을 할 수 있습니까? – VJS

답변

1

오라클 databae의 시퀀스를 생성합니다

CREATE SEQUENCE SEQ_APP_INSTANCE 
START WITH  1 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

을이 순서 사용하는 ID를 주석 : 당신의 INSTANCE_KEY 필드에

@GeneratedValue(generator="seq_item", strategy = GenerationType.SEQUENCE) 
@SequenceGenerator(name="seq_item",sequenceName="SEQ_APP_INSTANCE", allocationSize=10) 
@Column(name="INSTANCE_KEY") 
private int INSTANCE_KEY; 
+0

ok.let try, ...... – VJS

1

설정이 :

@Id 
@Column(name="INSTANCE_KEY") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqInstanceKey") 
@SequenceGenerator(name = "seqInstanceKey", sequenceName = "SEQ_INSTANCE_KEY", allocationSize = 1) 
private int INSTANCE_KEY; 

그리고 당신의 DB에 'SEQ_INSTANCE_KEY'라는 속성 증가 값 = '1'을 갖는 시퀀스를 추가합니다.

2

최대 절전 모드 인 GenericGenerator 클래스를 사용할 수 있습니다.

@Id 
@GenericGenerator(name = "increment", strategy = "increment") 
@GeneratedValue(generator = "increment") 
private int INSTANCE_KEY; 
관련 문제