2016-10-27 5 views
0

私は、既存のMysqlデータベースからJPA/Hibernateを使用して新しいPlayアプリケーションを作成しようとしています。既に存在するデータベースからHibernateを正しく実装するには?

hibernate.hbm2ddl.autoが "更新"に設定されています。

テーブルの投稿には6つのエントリがあります。 問題が"SELECT p FROM Posts p"のようなHQLステートメントを実行すると、空の結果が得られますが、"SELECT * FROM posts"のようなネイティブクエリを実行すると、既存のエントリが取得されます。

私はここで何か巨大なものを逃していると思います。これは、この空の結果を説明できるようなものがありますか? Hibernateは、既存のデータベースからHQLステートメントで正しい結果を返すために、特定のキャッシュを構築する必要がありますか?なぜそんなことが必要なのだろう?

+1

既存のデータベースの場合は、自動DDLを使用しないでください。既存のデータベーススキーマにきれいにマップするエンティティを作成するようにしてください。おそらくテーブル名のようなものと不一致があります(通常、クラス名は 'Post'でなければなりません)。 – chrylis

+0

ありがとう、あなたは私に方法を示した、それは実際にいくつかのフィールドでマッピングの問題だった、それは奇妙です、アプリケーションが実行可能な場合は、休止状態が彼のマッピングチェックを渡していない場合。 – Aphax

答えて

1

テーブルの投稿には6つのエントリがあります。問題は、 "SELECT p FROM Posts p"のようなHQL文を実行すると、空の結果が得られますが、 "SELECT * FROM posts"のようなネイティブクエリを実行すると、既存のエントリが得られます。

これは、mysqlテーブルからjpaエンティティへのマッピングを定義する必要があるようです。 (Eclipseプラグインを使用してそれを行う方法については、hereの例を参照してください)ハイバネートツールを使用して自動的に生成することができます。

その後、クエリからいくつかの結果が得られるはずです。その結果、Hibernateは途中でキャッシュにデータを入力します。

関連する問題