使用JPA时HQL的异常行为(***更多信息给读者而不是问题***)

时间:2010-08-03 05:22:38

标签: hibernate hql

我试图在基于JPA的应用程序中为某些报告目的触发hql。 我尝试的以下查询在启动时保持conking(因为我将它作为NamedQuery提供,在启动时检查了它的语法)。

查询不正确:

SELECT t FROM Table_1 tb1 
INNER JOIN 
Table_2 tb2
where tb1.name = 'someName';

经过大量的排列和组合(以及挖掘查询的其他部分,我之前怀疑),我意识到问题出现在“ t ”中。而不是上面的查询,正确的查询应该是......

SELECT tb1 FROM Table_1 tb1
INNER JOIN 
Table_2 tb2
where tb1.name = 'someName';

请注意,HQL期望 tb1 与表格短名称“ tb1 ”相同

tableName shortform和选择不匹配只会导致我遇到的问题。令人惊讶的是,hibernate / JPA不会在堆栈中出现错误,但部署会继续运行,我需要最终杀死java进程以摆脱它。

希望这有助于某人。

如果有人也可以推理这种行为,那就太好了。

谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定是否理解这个问题,但是如果您认为Hibernate应该在NamedQuery创建时报告(或不是)语法错误EntityManagerFactory的方式进行改进,那么您应该创建一个问题。我不认为它会得到高度重视。

答案 1 :(得分:0)

处理此类语句的最佳方法是将“变量”放在SELECT子句中与表Alias相同的实践。 那不是

"SELECT t from Table_1 T1" 

制作像

这样的声明
"SELECT T1 from Table_1 T1"

希望将来帮助某人。