jpa + hibernate查询来自两个带连接的表的记录

时间:2016-05-16 18:21:29

标签: java hibernate jpa

我需要获得如下记录: -

toolTypeId, quantity, toolName , onTruck, Damage, loss
    2         50        test1      20      25      5

onTruck,Damage,loss : - 列表中的总记录

前3个来自toolsType表,最后3个来自userTools。

我的模特课: -

ToolsType.java

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String toolName;
private Long quantity;

UserTools.java

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToOne
private ToolsType toolsType;
private Long loss;
private Long onTruck;
private Long damage;

我在我的Repository文件中尝试类似的东西 : - select count(toolstype.id), toolstype.toolName, quantity FROM toolstype GROUP BY(toolstype.id);

我知道它不正确请帮我正确查询此问题。

谢谢

2 个答案:

答案 0 :(得分:0)

使用此查询。希望它会对你有所帮助。在这种情况下,您需要使用alias

select count(ttype.id), ttype.toolName, ttype.quantity FROM toolstype as ttype GROUP BY(ttype.id);

更新的查询如下:

select count(ttype.id), ttype.toolName, ttype.quantity, utools.onTruck, utools.damage, utools.loss
FROM toolstype ttype, usertools utools 
where ttype.id = utools.id
GROUP BY ttype.toolName, ttype.quantity, utools.onTruck, utools.damage, utools.loss

答案 1 :(得分:0)

您必须使用此JPQL查询:

select tt.id, count(tt.id), tt.toolname, ut.onTruck, ut.damage, ut.loss
from UserTools ut
join ut.toolsType tt
group by tt.id, tt.toolname, ut.onTruck, ut.damage, ut.loss

您需要将select子句中的所有group by值放入查询中以对结果进行分组。

更新:

如果您需要结果中的UserTools值和所有ToolsType值之和,则查询将为:

select tt.id, count(tt.id), tt.toolname, sum(ut.onTruck), sum(ut.damage), sum(ut.loss)
from ToolsType tt, UserTools ut
where tt.id = ut.toolsType.id
group by tt.id, tt.toolname, ut.onTruck, ut.damage, ut.loss

我还认为UserToolsToolType之间的关系是@ManyToOne而不是@OneToOne