2016-03-25 16 views
1

の一部を持っていますdata_id
FK:area_id FK:customer_id(お客様より)JPA - 3つのテーブルを結合します。 1つはPKです。これは、複合PK <code>customer_id</code>と<code>company_id</code><br></p> <p><strong>データ</strong><br> ...のIDを持っている</p> <p><strong>カスタマー</strong><br> ::他の二つのそれぞれが、私は3つのエンティティを持ってPK

エリア
ID:私はJPAで@Join注釈を作成するにはどうすればよい(上記顧客からの)のcompany_id


FKをAREA_ID?私は@JoinTableを使用しなければならないと仮定しますが、どうやってそれを行うのか分かりません。

カスタマー

@Entity 
@Table(name="customer") 
@NamedQuery(name="Customer.findAll", query="SELECT c FROM Customer c") 
public class Customer implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private CustomerPK id; 

    //bi-directional many-to-one association to CustomColumnDataCustomer 
    @OneToMany(mappedBy="customer") 
    private List<CustomColumnDataCustomer> customColumnDataCustomers; 

CustomerPK

@Embeddable 
public class CustomerPK implements Serializable { 
    //default serial version id, required for serializable classes. 
    private static final long serialVersionUID = 1L; 

    @Column(name="customer_id") 
    private long customerId; 

    @Column(name="company_id") 
    private String companyId; 

CustomColumnDataCustomer

@Entity 
@Table(name="custom_column_data_customer") 
@NamedQuery(name="CustomColumnDataCustomer.findAll", query="SELECT c FROM  CustomColumnDataCustomer c") 
public class CustomColumnDataCustomer implements Serializable { 
private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="custom_column_data_cust_uid") 
    private int customColumnDataCustUid; 

    //bi-directional many-to-one association to Customer 
    @ManyToOne 
    private Customer customer; 

    //bi-directional many-to-one association to AreaXCustomColumn 
    @ManyToOne 
    @JoinColumn(name="area_x_custom_column_uid") 
    private AreaXCustomColumn areaXCustomColumn; 

@Entity 
@Table(name="area_x_custom_column") 
@NamedQuery(name="AreaXCustomColumn.findAll", query="SELECT a FROM AreaXCustomColumn a") 
public class AreaXCustomColumn implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="area_x_custom_column_uid") 
    private int areaXCustomColumnUid; 

    @Column(name="company_id") 
    private String companyId; 

    //bi-directional many-to-one association to CustomColumnDataCustomer 
    @OneToMany(mappedBy="areaXCustomColumn") 
    private List<CustomColumnDataCustomer> customColumnDataCustomers; 

    //bi-directional many-to-one association to CustomColumnDefinition 
    @ManyToOne 
    @JoinColumn(name="custom_column_definition_uid") 
    private CustomColumnDefinition customColumnDefinition; 
+0

で編集されました。編集:編集が明確になりました。 正確に何を達成したいですか?あなたはそれらに参加するクエリを望んでいるのですか、または@JoinTableを作成したいのですか、JPAでこの関係を動作させる方法を探したいだけですか? 質問が不明です –

+0

エンティティを書きましたか? –

+0

@Joinアノテーションを使用してJPAで動作する関係を探しています。はい、私は実体を作りました。 – ThirstyForJava

答えて

0

注釈@EmbeddedId@JoinColumnとなり、これを解決する方法をAreaXCustomColumn。

私が最近したプロジェクトでも同様の解決策が必要でした。

私はPlatformEventMasterMembershipの3つのオブジェクトを持っています。 MembershipKeyクラスは、単に構成さ

@EmbeddedId 
private MembershipKey id; 
    • Membershipこの場合の顧客であり、これは、2本のPK、プラットフォームIDとEventMaster ID(これは@EmbeddedIDによって解決される)を有しています他のクラスの両方のPKの:

      @ManyToOne 
      @JoinColumn(name = "eventmaster_id") 
      private EventMaster eventMaster; 
      
      @ManyToOne 
      @JoinColumn(name = "mosplatform_id") 
      private MOSPlatform platform; 
      
    • PlatformEventMasterクラスの両方が(これはPlatformクラスである)同じように見える:

      @OneToMany(mappedBy = "id.platform") 
      private List<Membership> memberships; 
      

    が、私はこれはあなたのソリューションをうまく助けるべきだと思います。

    EDIT:質問のコードは

  • +0

    - >これにより、PlatformとEventmasterにも参加できますか? – ThirstyForJava

    +0

    編集:私のクエリは間違っていました。今すぐ変更しています。 –

    +0

    これは私のために働くかどうか分かりません。基本的に私は顧客とデータに参加したいと思っています。しかし、データに必要なFK(company_id)の1つは、エリアにあります。代わりに、area_idのFKはDataにあり、CustomerのComposite Keyに必要な2番目のFKを保持します。 – ThirstyForJava

    関連する問題

     関連する問題