6

Hibernate と MySql サーバーを使用しています。複数のデータベースを「名前空間」として使用しています (例: userstransactionsなど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 がこの無効なクエリを生成するのはなぜですか? 誰かがこの問題を経験したことがありますか?

4

1 に答える 1

1

ジェネレーターのスキーマを指定する必要があります。より詳細な回答については、SO に関するこの質問を参照してください。

于 2013-07-01T13:32:06.233 に答える