2010-03-25 5 views
0

"재미있는"디자인을 가진 기존 데이터베이스에서 JPA 엔티티를 생성하려고합니다.기본 키가없는 조인 테이블에서 엔티티를 만드는 방법

데이터베이스에는 UserSet이라는 테이블이 있으며이 테이블에는 여러 다른 UserSet에 대한 링크가있을 수 있습니다. UserSets과 LinkedUserSets 사이에는 일대일 관계가 있습니다. LinkedUserSets는 또한 UserSets과 일대일 관계가 있습니다.

달리 JPA Tools를 사용하여 데이터베이스 구조에서 JPA Entity를 생성하려고했습니다. 결과로 나온 엔티티 Linkeduserset은 @Id 또는 @EmbeddedId 주석을 누락하여 컴파일하지 못합니다. 결과 엔티티에는 (@Id로 표시 할 수없는) 두 개의 @JoinColumns 만 포함되어 있으므로이 문제를 해결하는 방법을 찾지 못했습니다.

데이터베이스 구조는 어떤 방식 으로든 수정할 수 없습니다.

어떻게 든이 문제를 극복 할 수있는 방법이 있습니까? 작성 테이블 문

관련 유리체 :

CREATE TABLE `LinkedUserSets` (
    `UsrSetID` INT(11) NOT NULL DEFAULT '0' , 
    `ChildID` INT(11) NOT NULL DEFAULT '0' , 
    CONSTRAINT `fk_LinkedUserSets_UserSet1` 
    FOREIGN KEY (`UsrSetID`) 
    REFERENCES `UserSet` (`UsrSetID`)); 

CREATE TABLE `UserSet` (
    `UsrSetID` INT(11) NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`UsrSetID`), 
    CONSTRAINT `fk_UserSet_LinkedUserSets1` 
    FOREIGN KEY (`UsrSetID`) 
    REFERENCES `LinkedUserSets` (`ChildID`)); 

생성 된 개체 :

@Entity 
@Table(name="linkedusersets") 
public class Linkeduserset { 
    //bi-directional many-to-one association to Userset 
    @ManyToOne 
    @JoinColumn(name="UsrSetID") 
    private Userset userset1; 

    //bi-directional one-to-one association to Userset 
    @OneToOne 
    @JoinColumn(name="ChildID") 
    private Userset userset2; 
} 


@Entity 
@Table(name="userset") 
public class Userset { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="UsrSetID") 
    private int jngSetID; 

    //bi-directional many-to-one association to Linkeduserset 
    @OneToMany(mappedBy="userset1") 
    private Set<Linkeduserset> linkedusersets; 

    //bi-directional one-to-one association to Linkeduserset 
    @OneToOne(mappedBy="userset2") 
    private Linkeduserset linkeduserset; 
} 

오류 메시지 :

Entity "Linkeduserset" has no Id or EmbeddedId 

답변

1

데이터베이스를 변경하지 않고 매핑하려는 경우 UserSet 클래스를 자체에 대한 many-to-many 관계가있는 엔티티로 매핑하는 것이 좋습니다. LinkedUserSet 조인 테이블로 사용하여 매핑이 실제로 데이터베이스에있는 것을 반영하도록합니다.

0

당신은 여전히 ​​LinkedUserSets 테이블에 고유 한 PK 컬럼을 추가해야합니다 . 이것은이 테이블을 강화하는 것을 도울 것입니다.

더 빠른 조회를 위해 LinkedUserSets (UsrSetId, ChildId)에 색인 (고유?)을 만들 수도 있습니다.

... 그런 "재미있는"디자인이 아닙니다. 이것은 매우 일반적입니다 :)

+0

데이터베이스 구조를 수정할 위험이 없습니다. 동일한 데이터베이스를 활용하여 "다른 것"을 깨뜨릴 수도 있습니다. DB에서 유일하게 "흥미로운"부분은 아닙니다 :-) – tputkonen

관련 문제