2016-03-18 54 views
1

我對使用JPA/Hibernate相當陌生。我試圖找出加入兩個表的複合鍵和沒有真正的數據庫關係的最佳方式。休眠/ JPA加入兩張帶複合鍵的表(無外部關係)

enter image description here

@Embeddable 
public class StepPK implements Serializable{ 
    @Column(name = "step_id") 
    protected String stepId; 

    @Column(name = "packet_id") 
    protected String packetId; 
    ... 
} 


@Entity 
@Table(name = "step_def") 
@IdClass(StepPK.class) 
public class InprocessPacketStep implements Serializable{ 

    @Id 
    private String stepId; 

    @Id 
    private String packetId; 

} 


@Embeddable 
public class StepDetailPK implements Serializable { 
    @Column(name = "step_id") 
    protected String stepId; 

    @Column(name = "packet_id") 
    protected String packetId; 

    @Column(name="user_id") 
    protected String userId; 

    @Column(name="parallel_step_id") 
    protected String parallelId; 
    ... 
} 

@Entity 
@Table(name = "step_detail") 
@IdClass(StepDetailPK.class) 
public class InprocessPacketStepDetail implements Serializable { 

    @Id 
    private String stepId; 

    @Id 
    private String packetId; 

    @Id 
    private String parallelId; 

    @Id 
    private String userId; 
} 

出的表中提取信息時,單獨什麼我到目前爲止的偉大工程,但我需要一些方法來加入他們的step_id的數據類型。由於沒有分配關係,因此執行OneToMany和JoinColumns似乎不起作用。

我試過使用ManyToMany,編譯時它不會炸燬,但在我的測試中檢查後,它會導致SQLGrammar異常。

我唯一的想法是通過查詢手動加入它們,但運行entityManager.createQuery("select InprocessPacketStep step join inprocessPacketStepDetail d on d.stepId = step.stepId")會導致運行時錯誤。

任何建議,將不勝感激。我花了不少努力試圖找到我找到的不成功的東西。

+0

呵呵,伊馬頂部的ge鏈接是基本的表格說明 – Jerron

+0

請詳細瞭解所遇到的錯誤。另外,你試圖得到什麼輸出? –

+0

爲什麼你不能使用額外的關係表?這些實體之間的關係是什麼? – Cootri

回答

0

如果你的數據庫架構不是遺產,你可以改變它,然後@ManyToMany額外的關係表關聯應該做的伎倆: enter image description here

有很多examples在網上流行的JPA 2 .X實施框架(當然也包括休眠)

否則,你應該從這個線程嘗試的解決方案: @ManyToMany without join table (legacy database)