子串

时间:2018-01-18 19:19:07

标签: java hql

我有两个松散耦合的表。我有一个可用的SQL查询,但我很难将其转换为HQL。

表帐户有一个列'name',其中一个子字符串是另一个表的键。

SELECT
a.id, 
a.name 
j.description
FROM account a 
JOIN jar j ON  j.jar_id = substr(a.name, LOCATE('jar-', a.name) + LENGTH('jar-'), LENGTH(a.name)) 

此连接适用于account.name具有值'jar-255','jar-756','jar-881'等的地方。它通过子字符串提取id并使用它来引用jar表。

它在Java / HQL中不起作用,因为Account对象不直接引用或具有子Jar对象。错误是

org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join!

这是HQL中的连接:

JOIN Jar j ON j.jarId = substring(a.name, LOCATE(a.name, 'jar-') + LENGTH('jar-'), LENGTH(a.name))

这可以吗?

2 个答案:

答案 0 :(得分:0)

您的问题的可能解决方案如下:

SELECT
a.id, 
a.name 
j.description
FROM account a 
JOIN jar j 
ON  a.name = concat("jar-",j.jar_id);

答案 1 :(得分:0)

在Hibernate 5.1之前,您需要有一个引用/关系来进行连接。因此,如果它是旧版本(低于5.1),那么您将必须执行以下操作:

FROM Account a, Jar j WHERE j.jarId=substring....