我想使用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做这样的事情?
答案 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是复合的)。