HQL 加入子字符串
HQL join on substring
我有两个松耦合的 table。我有一个有效的 SQL 查询,但我很难将其转换为 HQL。
Table 帐户有一列 'name',其中一个子字符串是另一个 table.
的键
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 table.
它在 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))
这可以实现吗?
您的问题可能的解决方案如下:
SELECT
a.id,
a.name
j.description
FROM account a
JOIN jar j
ON a.name = concat("jar-",j.jar_id);
在 Hibernate 5.1 之前,您需要 reference/relation 才能进行连接。所以如果是旧版本(5.1以下),那么你将不得不执行以下操作:
FROM Account a, Jar j
WHERE j.jarId=substring....
我有两个松耦合的 table。我有一个有效的 SQL 查询,但我很难将其转换为 HQL。
Table 帐户有一列 'name',其中一个子字符串是另一个 table.
的键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 table.
它在 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))
这可以实现吗?
您的问题可能的解决方案如下:
SELECT
a.id,
a.name
j.description
FROM account a
JOIN jar j
ON a.name = concat("jar-",j.jar_id);
在 Hibernate 5.1 之前,您需要 reference/relation 才能进行连接。所以如果是旧版本(5.1以下),那么你将不得不执行以下操作:
FROM Account a, Jar j
WHERE j.jarId=substring....