2011-04-12 8 views
1

데이터베이스를 모델링하고 있습니다.
TRIPLE에는 세 개의 CONCEPT이 있습니다. 따라서 클래스 TRIPLE의 기본 키는 모두 uri 3 개입니다. 하나의 개념은 다른 TRIPLE에있을 수 있습니다.
또한 TRIPLE은 다른 클래스 인 ANNOTATION과 관련이 있으며, 여기에 질문이 있습니다. 어떻게 triple_id을 식별 할 수 있습니까 ?? 하지만 우선,이 ID 합성물을 만드는 것이 올바른지 확인하십시오. 은 모델에 그 :Hibernate @id composite

Concept.java

@Entity 
@Table(name = "concept") 
public class Concept implements java.io.Serializable { 

    private static final long serialVersionUID = 1L; 
    private String id; 
    private List<TripleDBModel> triples; 
@ManyToMany(
      cascade={CascadeType.ALL}, 
      fetch=FetchType.LAZY, 
      mappedBy = "concepts" 
    ) 
    public List<TripleDBModel> getTriples() { 
     return triples; 
    } 

    public void setTriples(List<TripleDBModel> triples) { 
     this.triples = triples; 
    } 

ConceptPk.java

@Embeddable 
public class ConceptPk implements java.io.Serializable { 

    private static final long serialVersionUID = 1L; 
    private String uri; 

    public ConceptPk(String uri, String label){ 
     this.uri = uri; 
    } 

    public ConceptPk(){ 
     super(); 
    } 

    @Id 
    @Column(name = "uri", length = 100, unique = true, nullable = false) 
    public String getUri() { 
     return uri; 
    } 
    public void setUri(String uri) { 
     this.uri = uri; 
    } 
} 

Triple.java

@Entity 
@IdClass(ConceptPk.class) 
@Table(name = "triple") 
public class TripleDBModel { 

    protected List<Annotation> annotations; 
    protected String conceptUriSubject; 
    protected String conceptUriObject; 
    protected String conceptUriPredicate; 



    @ManyToMany(
      cascade={CascadeType.ALL}, 
      fetch=FetchType.LAZY 
    ) 
    @JoinTable(name = "triple_has_concept", 
      [email protected](name="uri"), 
      [email protected](name="triple_id")) //What shoul I write here??? 
    public List<Annotation> getAnnotations() { 
     return annotations; 
    } 
    public void setAnnotations(List<Annotation> annotations) { 
     this.annotations = annotations; 
    } 
    @Id public String getConceptUriSubject() { 
     return conceptUriSubject; 
    } 
    public void setConceptUriSubject(String conceptUriSubject) { 
     this.conceptUriSubject = conceptUriSubject; 
    } 
    @Id public String getConceptUriObject() { 
     return conceptUriObject; 
    } 
    public void setConceptUriObject(String conceptUriObject) { 
     this.conceptUriObject = conceptUriObject; 
    } 
    @Id public String getConceptUriPredicate() { 
     return conceptUriPredicate; 
    } 
    public void setConceptUriPredicate(String conceptUriPredicate) { 
     this.conceptUriPredicate = conceptUriPredicate; 
    } 
} 

미리 감사드립니다 !!

class TripleId implements Serializable { 
    @Column(...) 
    private String conceptUriSubject; 

    @Column(...) 
    private String conceptUriObject; 
} 

을 트리플에서 사용 :

답변

2

이 같은 아이디 클래스를 사용할 수 inverseJoinColumns= {@JoinColumn(name="subjectUri"), @JoinColumn(name="objectUri"), ... }

+0

감사합니다 :

@Entity @Table(name = "triple") public class TripleDBModel { @EmbeddedId private TripleId id; ... } 

는 또한 여러 컬럼에 가입 제공 할 수 있습니다 , 나는 두 번째 옵션을 선택하고 semms 작업 –

관련 문제