2011-04-08 5 views
0
Given this schema: 
+-----------------+------------------+------+-----+-------------------+-------+ 
| Field   | Type    | Null | Key | Default   | Extra | 
+-----------------+------------------+------+-----+-------------------+-------+ 
| internal_id  | int(10) unsigned | NO | PRI |     |  | 
| external_id  | varchar(255)  | NO | PRI |     |  | 
| mapping_type_id | int(4) unsigned | NO | PRI |     |  | 
| creation_date | timestamp  | NO |  | CURRENT_TIMESTAMP |  | 
+-----------------+------------------+------+-----+-------------------+-------+ 

그리고이 주석에서 HSQL을위한 테이블을 조인 기존 데이터베이스와 잘 작동하지만는 기존 매핑

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) 
@JoinTable(name="mapping", 
     joinColumns = { @JoinColumn(name="internal_id") }, 
     inverseJoinColumns = { @JoinColumn(name="external_id") } 
) 
@WhereJoinTable(clause="mapping_type_id=2") 
private List<Video> videos = Lists.newArrayList(); 

내가 만들 드롭으로 HSQLDB를 통해 이러한 주석이 클래스를 실행할 때 (기본 메모리 단위 테스트를위한) 옵션, 나는 다음과 같은 얻을 :

[elided] 
Caused by: java.sql.SQLException: Column not found: VIDEOS0_.MAPPING_TYPE_ID in statement 
[elided] 

그래서 내가 SchemaExport를 함께 확인하고, 최대 절전 모드는 매핑을위한 조인 테이블과 DB 스키마를 생성하는 사실이지만, 그것은 아니다 mapping_type_id 필드를 포함하여 기존 데이터베이스에서 실행되는 코드를 사용하지 않고 스키마에서 나머지 스키마로 을 생성하려면 어떻게합니까?

답변

0

이 질문에 대한 대답은 포함 된 ID를 만들고이를 사용하여 조인 테이블 구문을 사용하는 대신 클래스를 테이블을 통해 매핑하는 것입니다. 조인 테이블에 row-id가 있으면 위조하기가 쉽지만 그렇지 않으면 @Embeddable을 사용하고 @EmbeddedId를 사용하면 작동하게 할 수 있습니다.