我有两张桌子T1和T2。T1有ID(pk)、名称、类型。t2有sid,tid,type。t2的主键是所有3:sid、tid、type的组合。现在sid和tid是外键,也映射到了id为t1。有人请帮忙用JPA做这个。

package com.sap.table;

import java.io.Serializable;
import java.lang.String;
import javax.persistence.*;

import static javax.persistence.GenerationType.TABLE;
import static javax.persistence.GenerationType.IDENTITY;

/**
 * Entity implementation class for Entity: Relations
 *
 */
@IdClass(RelationsPK.class)
@Entity
@Table (name = "demo_relations11")


public class Relations implements Serializable {


    //@EmbeddedId
    //@JoinColumn(referencedColumnName="AssetID")
//private RelationsPK Relations_PK;
//  @Id
////    @JoinColumn(referencedColumnName="AssetID")
//  private String TargetID;
@Id
private String Type;
private static final long serialVersionUID = 1L;

//    @MapsId("SourceID")
@Id
@ManyToOne(targetEntity=Asset.class)

@JoinColumns({
    @JoinColumn(name="SourceID", referencedColumnName="AssetID"),
    @JoinColumn(name="TargetID", referencedColumnName="AssetID")
})
//@JoinColumn(referencedColumnName="AssetID")

Asset asset;



public Asset getAsset() {
    return asset;
}
public void setAsset(Asset asset) {
    this.asset = asset;
}
public Relations() {
    super();
}
//  public String getSourceID() {
//      return this.SourceID;
//  }
//
//  public void setSourceID(String SourceID) {
//      this.SourceID = SourceID;
//  }
//  public String getTargetID() {
//      return this.TargetID;
//  }
//
//  public void setTargetID(String TargetID) {
//      this.TargetID = TargetID;
//  }
public String getType() {
    return this.Type;
}

public void setType(String Type) {
    this.Type = Type;
}

}

T1-ID(pk),名称,类型
t2-sid(fk到id),tid(fk到id),类型
t2-sid,tid,类型的pk

最佳答案

我找到了解决办法。首先我使用了@idClass符号。为主键创建了另一个类。然后在我的类中使用@id进行注释。我也用过

  @JoinColumn(name = "")
  @ManyToOne(targetEntity = parent_class)

我对引用父表的所有主键使用了上述注释。

关于java - 复合主键和外键jpa,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17414569/

10-12 23:38