我对使用 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")
导致运行时错误。
如有任何建议,我们将不胜感激。我花了很多时间在谷歌上搜索尝试不同的东西,但没有成功。
最佳答案
如果您的数据库架构不是遗留的,并且您可以更改它,那么@ManyToMany
与附加关系表的关联应该可以解决问题:
有很多examples在网络上流行的 JPA 2.x 实现框架(当然包括 Hibernate)
否则您应该尝试此线程中的解决方案: @ManyToMany without join table (legacy database)
关于java - Hibernate/JPA 使用组合键连接两个表(无外部关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36093667/