2010-04-14 2 views
3

I 이러한 통계와 ManyToMany 협회에서 두 클래스를 매핑 다음 SQL이 관련 테이블 작성을 위해 생성JPA가 - 대다 연관 테이블의 하나의 외래 키가

@Entity 
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 
public abstract class TechnicalItem extends GenericBusinessObject implements Resumable{ 

    @SequenceGenerator(name="TECHNICAL_ITEM_ID_GEN", sequenceName="TECHNICAL_ITEM_ID_SEQ") 
    @Id 
    @Column(name = "\"ID\"", nullable = false) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TECHNICAL_ITEM_ID_GEN") 
    private int id; 


    @ManyToMany(mappedBy = "referencePerformanceItems", fetch=FetchType.LAZY) 
    private List<TestingRate> testingRates; 
} 

@Entity 
@DiscriminatorValue("T") 
public class TestingRate extends Rate { 


    @ManyToMany(fetch=FetchType.LAZY) 
    @JoinTable(name="ecc.\"TESTING_RATE_TECHNICAL_ITEM\"", 
     joinColumns = {@JoinColumn(name = "\"TESTING_RATE_ID\"")}, 
     inverseJoinColumns = {@JoinColumn(name = "\"TECHNICAL_ITEM_ID\"")}) 
    //@ManyToMany(mappedBy = "testingRates", fetch=FetchType.LAZY) 
    private List<TechnicalItem> referencePerformanceItems; 
} 

이다

create table ecc."TESTING_RATE_TECHNICAL_ITEM" (
    "TESTING_RATE_ID" int4 not null, 
    "TECHNICAL_ITEM_ID" int4 not null 
); 
alter table ecc."TESTING_RATE_TECHNICAL_ITEM" 
    add constraint FKC5D64DF6A2FE2698 
    foreign key ("TESTING_RATE_ID") 
    references ecc."RATE"; 

두 번째 외래 키 "TECHNICAL_ITEM_ID"(연결 테이블에 있어야하는 복합 외래 키의 두 번째 부분)에 대한 언급이 없습니다. 정상적인 동작입니까? 2 열이 내 2 관련 테이블의 기본 키를 참조하는 2 개의 외래 키인 경우 매핑에서 무엇을해야합니까?

PostGreSQL 데이터베이스와 최대 절전 모드를 JPA 공급자로 사용합니다.

답변

3

두 번째 제약 조건을 놓치지 않았는지 확인하십시오. 비슷한 경우가 있는데, Hibernate는 DB 스키마를 매우 잘 생성합니다.

@ManyToMany(targetEntity = Two.class, cascade = { 
    CascadeType.ALL 
}) 
@JoinTable(name = "ONE_M2MJT_TWO", joinColumns = { 
    @JoinColumn(name = "ONE_ID") 
}, inverseJoinColumns = { 
    @JoinColumn(name = "TWO_ID") 
}, uniqueConstraints = { 
    @UniqueConstraint(columnNames = { 
     "ONE_ID", 
     "TWO_ID" 
    }) 
}) 
public List<Two> getManyToManyJoinTable() { ... } 


create table ONE (MY_SUPER_ID bigint generated by default as identity (start with 1), VALUE_ varchar(255), primary key (MY_SUPER_ID)) 
create table ONE_M2MJT_TWO (ONE_ID bigint not null, TWO_ID bigint not null, unique (ONE_ID, TWO_ID)) 
create table TWO (MY_SUPER_ID bigint generated by default as identity (start with 1), VALUE_ varchar(255), primary key (MY_SUPER_ID)) 
alter table ONE_M2MJT_TWO add constraint FKA575066C950B44B foreign key (TWO_ID) references TWO 
alter table ONE_M2MJT_TWO add constraint FKA575066C045060B foreign key (ONE_ID) references ONE 
+0

감사합니다. lexicore에게 "uniqueConstraint"매개 변수를 알지 못했습니다. 그러나 문제를 해결했습니다 : "TechnicalItem"에서 상속하는 "PerformanceItem"클래스가 아니라 많은 관계에 추상 클래스 "TechnicalItem"을 포함하려고했습니다. "uniqueconstraint"매개 변수가 없어도 2 개의 외래 키가 만들어집니다. 감사합니다. 어쨌든, 줄리앙 – Julien

관련 문제