我在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。
有人可以帮忙解决一下吗?