代码之家  ›  专栏  ›  技术社区  ›  Ian Pert

子字符串上的HQL联接

  •  0
  • Ian Pert  · 技术社区  · 6 年前

    我有两个松散耦合的表。我有一个可以工作的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)) 
    

    此联接适用于where帐户。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 回复  |  直到 6 年前
        1
  •  0
  •   Kalamarico Gopakumar AP    6 年前

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

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

        2
  •  0
  •   Rakesh Mosalpuri    6 年前

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

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