2010-12-31 6 views
0

안녕하세요. 모두에게 행복한 새해입니다.JPA를 사용하여 테이블 끝에 엔티티를 삽입하는 방법은 무엇입니까?

JPA를 사용하여 테이블 끝에 레코드를 삽입해야합니다 (테이블에 자동 증가가 설정되지 않았습니다).

내가 마지막 ID (정수)를 가져 와서 삽입하기 전에 엔티티에 적용 할 수 있다는 것을 알고 있지만 어떻게 수행 할 수 있습니까? 어떤 방법이 가장 효과적일까요?

답변

2

글쎄, 실제로 테이블의 끝 부분을 알 수는 없지만 JPA는 ID 생성기를 연결하기위한 많은 옵션을 가지고 있습니다.

하나의 일반적인 옵션은 ID가 필요한 각 엔티티에 대한 카운터 (http://download.oracle.com/docs/cd/B32110_01/web.1013/b28221/cmp30cfg001.htm)가있는 자체 테이블을 사용하는 것입니다.

@Id(generate=TABLE, generator="ADDRESS_TABLE_GENERATOR") 
@TableGenerator(
name="ADDRESS_TABLE_GENERATOR", 
    tableName="EMPLOYEE_GENERATOR_TABLE", 
    pkColumnValue="ADDRESS_SEQ" 
) 
@Column(name="ADDRESS_ID") 
public Integer getId() { 
    return id; 
} 

... 다른 "발전기"전략을 봤 할 ...

편집

나는 그가 JPA에 대해 알고하지 않습니다 말한대로 @a_horse_with_no_name를 참조 감히

. 시퀀스와 같은 원시 메커니즘 (모든 DB에서 사용할 수없는)을 사용하려면 JPA에서 이러한 생성기를 선언 할 수 있습니다.

테이블 접근 방식에서 어떤 문제가 발생했는지 알지 못합니다. 성공적으로 실행되는 대규모 설치를 알고 있습니다. 그러나 어쨌든 이것은 확장 성 외에도 많은 요인에 달려 있습니다. 예를 들어,이 기능을 휴대용 등으로 바꾸려면 다른 전략을 찾아 적절하게 선택하십시오.

+0

은 테이블에 단독 잠금을 설정하지 않는 한 다중 사용자 환경에서 안정적으로 작동하지 않습니다. 높은 인서트 속도를 갖는 환경에서는 속도가 느려집니다. 한 시간에 몇 개의 행만 삽입하면 성능상의 큰 불이익은 없을 것입니다. 하지만 삽입물을 수백 번하고 싶다면 잠그는 것이 문제가 될 것입니다. Btw : 시퀀스는 Oracle, Firebird, PostgreSQL, DB2, H2, Derby, Ingres 및 Informix와 같은 많은 DBMS에서 지원됩니다. 기본 솔루션 **은 카운터 테이블보다 ** 항상 ** 더 빠르고 안정적입니다. –

+0

@a_horse_with_no_name - 짧은 이름은 어떨까요 :-) 매번 단일 번호 만 체크 아웃하면됩니다. 그러나 오름차순, 중단되지 않은 고유 한 번호 매기기가 필요한 특수한 비즈니스 구성이 없으면 필요하지 않습니다. 후드에서 시퀀스는 원자 적, 독점적 액세스를 갖는 싱글 톤 테이블 외의 것입니다. 나는 JPA와 같은 계층이 그러한 구조를 가진 형벌을 추가 할 것이라고 인정한다. 그러나 여전히 일부 최적화를 수행 할 수 있습니다. – mtraut

3

"표의 끝"과 같은 것이 없습니다. 관계형 테이블 의 행은 정렬되지 않습니다.

새 행을 삽입하기 만하면됩니다. 특정 주문이 필요한 경우 테이블에서 행을 선택할 때 ORDER BY을 적용해야합니다.

새 ID를 생성하는 경우 Oracle 시퀀스를 사용하십시오. 독창성을 보장합니다.

"카운터 테이블"을 사용하지 않는 것이 좋습니다. 해당 솔루션은 확장 가능하지 않거나 (올바르게 구현 된 경우) 안전하지 않은 경우 (확장 가능할 경우)입니다.

이렇게 만들어진 시퀀스가 ​​있습니다. JPA는 모르지만 시퀀스에서 ID를 얻을 수 없다면 더 나은 ORM을 찾을 것을 제안합니다.

+0

답장보다 낫지 만, "테이블의 끝"이라고 말하면 마지막 또는 최대 ID 이전에 의미합니다 관계형 테이블에서 특정 순서가 아니라는 것을 알고 있습니다. 적절하게 설명하지 못했습니다. – ErVeY

+1

"Before" 기본 키에도 의미가 없습니다. 고유 번호를 생성하십시오. 다른 기본 키와 상대적으로 "어디에서"나타나는 지 염려하지 마십시오. 기본의 실제 수에는 절대로 "의미"가 없어야합니다. 시퀀스가 제공하는 것은 정확히 무엇인가? –

관련 문제