我是使用JPA / Hibernate的新手。我试图找出使用复合键连接两个表的最佳方法,而没有真正的数据库关系。
@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 :(得分:0)
如果您的数据库架构不是旧版,而可以更改它,则@ManyToMany
与其他关系表的关联应该可以解决问题:
网上有很多examples用于流行的JPA 2.x实现框架(当然包括Hibernate)
否则你应该尝试从这个线程解决: @ManyToMany without join table (legacy database)