这适用于 Oracle,但我们被告知要切换到 MySQL。在更改驱动程序信息和其他相关设置以指向 MySQL 数据库后,我不再能够执行我的命名查询。这是实体中定义的最简单的一个:
@NamedQuery(name="get_capability", query="select cb from Capability cb where cb.financial_Id = :fiId")
然后我有代码来执行查询,如下所示:
查询 = em.createNamedQuery("get_capability");
. . .
query.setParameter("fiId", fiId);
query.setMaxResults(1);
cabability = (Capability) query.getSingleResult();
最后一行抛出异常:
2013-04-24 10:46:00,677 WARN [org.hibernate.util.JDBCExceptionReporter] (http-127.0.0.1-8080-1) SQL 错误:1248,SQLState:42000
2013-04-24 10:46:00,677 错误 [org.hibernate.util.JDBCExceptionReporter] (http-127.0.0.1-8080-1) 每个派生表都必须有自己的别名
生成的 SQL 记录在日志文件中,如下所示:
/* named HQL query get_capability */ select
*
from
( select
capability0_.FINANCIAL_ID as FINANCIAL1_272_,
capability0_.ACTIVE_CONNECTIONS as ACTIVE2_272_,
capability0_.ALLOWED_CONNECTIONS as ALLOWED3_272_,
capability0_.COMPLETE_DETAILS as COMPLETE4_272_,
capability0_.FI_NAME as FI5_272_,
capability0_.MESSAGE_FORMAT as MESSAGE6_272_,
capability0_.PROVIDER_ID as PROVIDER7_272_,
capability0_.STATUS as STATUS272_,
capability0_.SUPPORTS_ACCOUNTS as SUPPORTS9_272_,
capability0_.SUPPORTS_CUSTOMER as SUPPORTS10_272_,
capability0_.SUPPORTS_IMAGE as SUPPORTS11_272_,
capability0_.SUPPORTS_STATEMENTS as SUPPORTS12_272_,
capability0_.SUPPORTS_TRANSACTIONS as SUPPORTS13_272_,
capability0_.SUPPORTS_TRANSFER as SUPPORTS14_272_
from
INSTITUTION capability0_
where
capability0_.FINANCIAL_ID=? )
where
rownum <= ?
我已经阅读了此错误的含义,即每个派生表都需要一个别名,并且我可以编辑派生 SQL 以通过添加别名来使其工作。我的问题是这个。由于这是一个派生查询 (SQL),我如何告诉 hibernate 添加别名,或者告诉 MySQL 不需要它?
休眠部分配置:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.showSql" value="true" />
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>