2016-03-18 27 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)