我有两个松散耦合的表。我有一个可用的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))
这可以吗?
答案 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....