2017-12-12 18 views
0

나는 Spring 3.2를 사용하고 있으며, JdbcTemplate에 일반 JDBC를 사용하는 데이터베이스에 대한 기존 호출을 수정하고자한다. 나는 그것에 익숙하지 않지만 내 질문에 대한 답변을 찾을 수 없습니다 (올바른 위치에 게시하기를 바랍니다).Spring에서 자동으로 컬럼 값을 생성한다. JdbcTemplate

UserRegistration 
id int, PRIMARY, autoincrement 
reg_year int, 
reg_id_in_year int, 
reg_number varchar(30), 

열 "ID"테이블의 기본 키이고 1

열에서 시작, 1 autoincrementing있다 "reg_id_in_year :

나는 데이터베이스에 다음 표 (ommited 일부 필드)가 가정 "어떤 종류의 논리적 색인입니다. 1 년 단위로 계산됩니다. 각 연도의 첫 번째 UserRegistration은 1로 설정됩니다.

"reg_number"열의 형식은 string = 'reg_year/reg_id_in_year'입니다. 예 : '2017/001'

값의 예 :

id | reg_year | reg_id_in_year | reg_number | 
1 |  2017 |    1 | 2017/001 | 
2 |  2017 |    2 | 2017/002 | 
3 |  2018 |    1 | 2018/001 | 
4 |  2018 |    2 | 2018/002 | 
5 |  2018 |    3 | 2018/003 | 

질문

새 레코드의 삽입을 할 때 "자동적으로"이러한 값을 생성합니다 JdbcTemplate을 어떤 기능이 있습니까 (어쩌면 일부 사용자 지정의 KeyGenerator를 사용)? 이제 데이터베이스를 2 번 호출해야합니다.

  • 가장 최근에 등록 번호를 얻으려면 먼저 입력하십시오.
  • 두 번째 새 레코드를 삽입하십시오.

미리 감사드립니다.

답변

0

네가 네이티브 SQL을 사용한다는 것을 의미하는 JDBCTemplate에 대해 언급 했으니, SQL 이라기보다는 오히려 그 일이 좋을 것입니다. 이 예제는 명명 된 매개 변수 인 JDBCTemplate을 기반으로하지만 원하는대로 적용 할 수 있습니다.

INSERT INTO the_table 
(reg_year, reg_id_in_year, reg_number) 
VALUES 
(:year, 
(SELECT COUNT(*)+1 FROM the_table WHERE reg_year = :year), 
CONCAT(:year,'/',(SELECT COUNT(*)+1 FROM the_table WHERE reg_year = :year)) 
) 

또는 당신은 삽입 값을 계산하고 그 (것)들에게 당신의 답변을

+0

감사를 채우기 위해 이전에 트리거를 만들 수 있습니다. 하지만 삽입 한 후에 Java 모델로 그 값을 되돌리고 싶다면 어떻게해야할까요? 데이터베이스를 한 번 더 호출해야합니까? – Krzysztof

+0

예. JDBCTemplate은 삽입 된 행 수만 리턴합니다. 또는 IN 및 OUT 매개 변수를 사용하여 저장 프로 시저를 정의하고 저장된 proc에서 값을 가져올 수 있습니다 – StanislavL