使用JPA将第二个表连接到第三个表中的复合键

时间:2017-02-06 22:53:40

标签: java hibernate jpa

我想使用Hibernate和JPA在三个表之间进行连接,如下所示:

表:[方括号中的主键]

Worker: ([worker_id], tool_id, site_id)
Toolbelt: ([toolbelt_id])
Site: ([site_id])
SiteToolbelt: ([site_id], toolbelt_id)
Tool: ([toolbelt_id, tool_id], tool_name)

要清楚,这意味着具有相同tool_id的不同工具带上的工具可以具有不同的名称。

这是我想要的SQL查询:

SELECT * FROM Worker w
JOIN SiteToolbelt st ON w.site_id = st.site_id
JOIN Tool t ON t.toolbelt_id = st.toolbelt_id AND t.tool_id = w.tool_id

我如何使用JPA做这样的事情?

1 个答案:

答案 0 :(得分:0)

从我的角度来看,tool_id不合适,因为你不能只从它的tool_id获取工具,所以最好调用tool_type或类似的东西。在这种情况下,只需使用embeddable类作为复合id

你应该有这样的课

@Embeddable
public class ToolPK implements Serializable {
    @ManyToOne
    @JoinColumn(name = "TOOLBELT_ID")
    private Toolbelt toolbelt;
    private Long toolType;
//(getter setter here)
}

然后在Tool类中将其用作主键

@EmbeddedId
private ToolPK toolPK;
//this is the real tool_id 
//not like tool_type which cant get you the object Tool without the toolbelt

然后你只需要在用户中放入tool_type,而不是tool_id(因为tool_id是复合的)。

相关问题