2016-03-25 20 views
1

我有三個實體:JPA - 加入三張表。一個PK。另外兩個分別具有PK的一部分

客戶
它... customer_idcompany_id

數據
ID的複合PK: data_id
FK:area_id(從下面的區域)
FK:customer_id(從上面的客戶)


ID:AREA_ID
FK:COMPANY_ID(從以上客戶)

如何創建JPA中@Join註解?我假設我必須使用@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; 

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的一種方式。

我需要一個類似的解決方案,我最近做了一個項目。我認爲如果我通過示例來解釋它會更容易:

我有三個對象,一個Platform,EventMasterMembership

  • Membership在這種情況下,你的客戶,它有兩個的PK中,平臺ID和EventMaster ID(這是由一個@EmbeddedID解決):

    @EmbeddedId 
    private MembershipKey id; 
    
  • MembershipKey類只由其他類的兩個的PKS:

    @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; 
    

我認爲這應該可以幫助您制定出解決方案。

編輯:代碼中的問題編輯英寸

+0

- >這是否允許您加入Platform和Eventmaster? – ThirstyForJava

+0

編輯:我的查詢是錯誤的,現在改變它。 –

+0

我不確定這是否適合我。基本上我想加入客戶和數據。但是我在Data中需要的FK(company_id)之一是在Area中。相反,area_id的FK位於Data中,然後持有Customer的Composite Key所需的第二個FK。 – ThirstyForJava

相關問題