Hibernate と MySql サーバーを使用しています。複数のデータベースを「名前空間」として使用しています (例: users
、transactions
などlogging
)。
したがって、特定のデータベースに接続しないように Hibernate を構成しました。
url = jdbc:mysql://127.0.0.1/
テーブルが配置されているデータベースは、catalog
属性を通じて hbm ファイルで定義されます。
<class name="com.myApp.entities.User" table="user" schema="" catalog="users"> ...
一部のデータをロードしたい場合、すべてが正常に機能し、Hibernate は期待される SQL クエリを生成するようです (テーブル名にカタログ プレフィックスを使用することにより)。
select id from users.user
ただし、新しいレコードを追加しようとすると、Hibernate はfrom [catalog].[table_name]
構文を使用しなくなりました。そのため、MySQL エラー「データベースが選択されていません」が表示されます。
select max(id) from user
Hibernate は新しいレコードを作成するために将来の ID を取得しようとしていますが、テーブルが配置されているデータベースを指定していません。次のようにする必要があります。
select max(id) from users.user
Hibernate がこの無効なクエリを生成するのはなぜですか? 誰かがこの問題を経験したことがありますか?