Hibernate / JPA使用复合键加入两个表(无外部关系)

时间:2016-03-18 20:28:27

标签: java hibernate jpa

我是使用JPA / Hibernate的新手。我试图找出使用复合键连接两个表的最佳方法,而没有真正的数据库关系。

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")会导致运行时错误。

任何建议都将不胜感激。我花了相当多的谷歌搜索我发现的不同的事情没有成功。

1 个答案:

答案 0 :(得分:0)

如果您的数据库架构不是旧版,而可以更改它,则@ManyToMany与其他关系表的关联应该可以解决问题: enter image description here

网上有很多examples用于流行的JPA 2.x实现框架(当然包括Hibernate)

否则你应该尝试从这个线程解决: @ManyToMany without join table (legacy database)