Hibernate无法解析包含STRAIGHT_JOIN关键字的本机查询

时间:2018-03-23 05:05:55

标签: java mysql hibernate java-ee

我在hibernate实体中的@Formula注释中使用了本机sql查询,但是Hibernate无法解析它,并抛出语法错误异常。 实体/查询类似于以下内容:

@Table(name="table2")
public class Table2{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Formula("(SELECT MAX(table1.col1) from table1 STRAIGHT_JOIN table2 t ON"   
     + "(table1.col2 = t.col2) INNER JOIN table3 AS t3 ON (t3.col1 = t.col1) 
    WHERE t3.col2 = 1)")
    private Integer code;

    @Column
    private Type type;
    ....
    //getters and setters
    ....
}

在查看mysql查询日志时,以下是正在执行的实际查询:

 select table2x0_.id, table2x0_.type, (SELECT MAX(table1.col1) from table1  
 STRAIGHT_JOIN table2x0_.table2 table2x0_.t ON (table1.col2 = t.col2) INNER JOIN  
 table3 AS t3 ON (t3.col1 = t.col1) WHERE t3.col2 = 1) as formula1_ from table2  
 table2x0_ where table2x0_.type in (0,1,2);

似乎hibernate的STRAIGHT_JOIN关键字出现问题。而不是STRAIGHT_JOIN table2 t,查询被写为STRAIGHT_JOIN table2x0_.table2 table2x0_.t,即它正在为外部查询的表别名添加前缀。

如果我用INNER JOIN替换STRAIGHT_JOIN,查询工作正常。但是我需要在我的用例中使用STRAIGHT_JOIN。

有人可以帮忙解决一下吗?

0 个答案:

没有答案