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....