2017-10-19 2 views
1

기본 키가없는 데이터베이스보기가 있습니다. 이 뷰에는 행을 고유하게 식별하는 열 세트가 있지만 그 중 세 열은 null이 될 수 있습니다. 나는 그 네 개의 열을 기반으로 복합 기본 키를 가진 개체를 만드는 시도했지만 뷰에서 데이터를 검색 할 때이 오류가 얻을 :가 자동으로 생성 추가엔티티에 기본 키가없는 JPA 맵보기

The primary key read from the row ... during the execution of the query was detected to be null. Primary keys must not contain null. 

예를 들어 내가 할 수있는 일이 있나요을 보기를 정의 할 때 열?

+0

예, 읽기에는 잘 작동하지만 자동으로 업데이트되는 자동 번호를 추가 할 수 있습니다. 테스트해야합니다. – Namphibian

답변

3

JPA 사양에 따르면 엔티티 클래스에는 고유 한 불변 ID이 있어야합니다.

논리적으로 기본 키가 없으면 엔티티라고 부를 수 없습니다. 대신에 VIEW의 POJO 표현을 생성 한 다음 SQL 네이티브 질의를 실행하고 그 결과 세트를 POJO에 매핑 할 수 있습니다. 다음은 JPA의 정의에 맞게 PK와를 @SqlResultSetMapping/@ConstructorResult http://www.thoughts-on-java.org/result-set-mapping-constructor-result-mappings/

0

모든 개체를 사용하여 샘플입니다. 주위에는 몇 가지 방법이 있습니다. 모두 해킹입니다.

1) 하나 개의 필드에 합리적인 값으로 null을) 대체 필드를 (결합하는 뷰를 수정 한 다음,

2) 합리적인 값으로 널 (null)을 대체 할 속성 변환 기능을 사용

PK가 당신을 그지도 복합 PK를 매핑 할 수 있습니다.

3) 당신은 아무것도 장기에 대한 PK에 의존하지 않는 경우에만의 ROWID가 실행 사이의 일관성을 유지하기 위해 guranteed하지 않는 한이, 괜찮 (A PK로 ROWID를 사용합니다.

내가 거기에 확신 다른 유사한 해결 방법이 있지만 1과 2를 사용하고 3을 사용하여 탐구했습니다.

관련 문제