Java Hibernate@id复合

Java Hibernate@id复合,java,hibernate,Java,Hibernate,我正在为数据库建模。 有三个TRIPLE,其中包含三个概念。因此类TRIPLE的主键是三个uri。(一个概念可以是不同的TRIPLE)。 另外,TRIPLE与另一个类,ANNOTATION相关,这里有一个问题,如何识别TRIPLE\u id??但首先,如果构建这个Id组合是正确的。 要建立模型,请执行以下操作: Concept.java @Entity @Table(name = "concept") public class Concept implements java.io.Seriali

我正在为数据库建模。
有三个
TRIPLE
,其中包含三个
概念。因此类
TRIPLE
的主键是三个
uri
。(一个概念可以是不同的
TRIPLE
)。
另外,
TRIPLE
与另一个类,
ANNOTATION
相关,这里有一个问题,如何识别
TRIPLE\u id
??但首先,如果构建这个Id组合是正确的。 要建立模型,请执行以下操作:

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;
    }
@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;
    }
}
@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", 
            joinColumns=@JoinColumn(name="uri"),
            inverseJoinColumns=@JoinColumn(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;
    }
}  
Triple.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;
    }
@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;
    }
}
@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", 
            joinColumns=@JoinColumn(name="uri"),
            inverseJoinColumns=@JoinColumn(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;
    }
}  
@实体
@IdClass(ConceptPk.class)
@表(name=“triple”)
公共类TripleDBModel{
受保护的清单说明;
受保护的字符串conceptUriSubject;
受保护的字符串对象;
受保护字符串概念谓词;
@许多(
cascade={CascadeType.ALL},
fetch=FetchType.LAZY
)   
@JoinTable(name=“triple\u具有\u概念”,
joinColumns=@JoinColumn(name=“uri”),
inverseJoinColumns=@JoinColumn(name=“triple_id”)//我应该在这里写什么???
公共列表getAnnotations(){
返回注释;
}
公共注释(列表注释){
这个注释=注释;
}
@Id公共字符串getConceptUriSubject(){
返回概念主体;
}
public void setConceptUriSubject(字符串conceptUriSubject){
this.conceptUriSubject=conceptUriSubject;
}
@Id公共字符串getConceptUriObject(){
返回概念对象;
}
公共void setConceptUriObject(字符串conceptUriObject){
this.conceptUriObject=conceptUriObject;
}
@Id公共字符串getConceptUriPredicate(){
返回概念谓词;
}
公共void setConceptUriPredicate(字符串conceptUriPredicate){
this.conceptUriPredicate=conceptUriPredicate;
}
}  

提前谢谢

您可以使用如下Id类:

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

  @Column(...)
  private String conceptUriObject;
}
并以三种形式使用:

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

  @EmbeddedId
  private TripleId id;
  ...
}
还请注意,您可以提供多个联接列:
inverseJoinColumns={@JoinColumn(name=“subarchitecture”),@JoinColumn(name=“objectUri”),…}