これは Oracle で動作しますが、MySQL に切り替えるように言われました。ドライバー情報とその他の関連設定を MySQL DB を指すように変更した後、名前付きクエリを実行できなくなりました。エンティティで定義されている最も単純なものを次に示します。
@NamedQuery(name="get_capability", query="select cb from Capability cb where cb.financial_Id = :fiId")
次に、次のようにクエリを実行するコードがあります。
query = em.createNamedQuery("get_capability");
. . .
query.setParameter("fiId", fiId);
query.setMaxResults(1);
cabability = (機能) 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 ERROR [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"/>