【问题标题】:Composite Primary and foreign key jpa复合主键和外键 jpa
【发布时间】:2013-07-02 19:21:31
【问题描述】:

我有两张桌子 T1 和 T2。 T1 具有 id(PK)、名称、类型。 T2 有 SID、TID、Type。 T2 的主键是所有 3 的组合:SID、TID、类型。现在 SID 和 TID 是外键,也映射到 T1 的 ID。有人请帮助如何在 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 的 PK - SID、TID、类型

【问题讨论】:

  • 在上面的代码中,我尝试了很多选项,因此您可以看到很多注释代码。请随时提出任何问题。
  • 对表格进行某种可视化表示也很有用。
  • 我不知道怎么把图片放在这里。如果可以的话,请指导我
  • 不是必须的图片,类似列表的东西,表示哪些是PK,哪些是FK,可能是表的create语句。
  • 让我们逐步解决这个问题,什么有效,什么无效,仅复合 PK 有效吗?单独加入?

标签: java jpa


【解决方案1】:

我找到了解决方案。首先,我使用了@IdClass 表示法。这是主键的另一个类。然后在我的班级中使用@Id进行注释以进行注释。我也用过

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2017-01-30
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2023-03-08
    • 2018-04-07
    相关资源
    最近更新 更多