| この記事の要点 |
|
エラー内容
net.sf.hibernate.MappingException: No persister for ~
「~」の部分には、session.save() や session.load() などに渡したオブジェクトのクラス名(例: com.example.bean.User)が入ります。このクラス名が、原因調査の一番の手がかりです。
このエラーの意味
Hibernate は、起動時に読み込んだマッピング定義から「クラスごとの永続化担当オブジェクト(persister)」を作っておき、保存や取得のたびにクラス名で persister を探します。渡されたクラスの persister が見つからない=そのクラスのマッピングが Hibernate に登録されていないときに、このエラーが出ます。
net.sf.hibernate で始まるのは Hibernate 2 系です。Hibernate 3 以降はパッケージが org.hibernate に変わり、同じ状況でも MappingException: Unknown entity などの文言になります(さらに新しい版では「Unable to locate persister」といった表現もあります)。原因の考え方は共通です。
主な原因
| 原因 | 確認するところ |
|---|---|
| 設定ファイルに mapping の記述がない | hibernate.cfg.xml に対象クラスの <mapping resource="..."/> があるか |
| hbm.xml のパスが間違っている / ビルド成果物に含まれていない | resource のパス(パッケージ区切りは /)、WAR や jar の中に hbm.xml が入っているか |
hbm.xml の class name と実際のクラスが違う | パッケージ名を含めた完全修飾名が一致しているか |
| マッピングしていないクラスを渡している | エラーに出たクラス名が想定どおりか(List や DTO、未マッピングのサブクラスを渡していないか) |
| アノテーション方式での登録漏れ | @Entity の有無、<mapping class="..."/> やパッケージスキャンの対象に入っているか |
なお、カラムの型と Java フィールドの型の不一致は、通常このエラーではなく、値の取得・設定時の別の例外(型変換エラーなど)として現れます。まずは「登録されているか」を疑うのが近道です。
対処法
1. 設定ファイルに mapping を追加する
Hibernate の設定ファイルに、使用する bean のマッピングファイルを列挙します。クラスを追加したのに、ここへの追記を忘れるのが典型的なパターンです。
<hibernate-configuration>
<session-factory>
<!-- 接続設定などは省略 -->
<mapping resource="com/example/bean/User.hbm.xml"/>
<mapping resource="com/example/bean/Dept.hbm.xml"/>
</session-factory>
</hibernate-configuration>
もちろん、個別の bean のマッピングファイル(~.hbm.xml)自体の定義も必要です。
<hibernate-mapping>
<class name="com.example.bean.User" table="user">
<id name="userId" column="user_id">
<generator class="assigned"/>
</id>
<property name="userName" column="user_name"/>
</class>
</hibernate-mapping>
2. コードで登録している場合
設定ファイルではなく Java コードで Configuration を組み立てている場合は、そこにクラスやリソースを追加します。
Configuration cfg = new Configuration()
.configure() // hibernate.cfg.xml を読む
.addResource("com/example/bean/User.hbm.xml");
// 同じパッケージに User.hbm.xml を置いているなら
// cfg.addClass(com.example.bean.User.class); でもよい
3. アノテーション方式の場合(Hibernate 3 以降)
- エンティティクラスに
@Entityが付いているか確認します @Entityの import が JPA のもの(javax.persistence.Entity、Hibernate 6 以降はjakarta.persistence.Entity)になっているか確認します。古い Hibernate 独自のorg.hibernate.annotations.Entityだけでは登録されません。使っている Hibernate のバージョンと javax / jakarta が食い違っていても認識されません<mapping class="com.example.bean.User"/>の追加、または Spring のpackagesToScanなどスキャン対象パッケージに含まれているかを確認します
確認方法
- エラーに表示されたクラス名を控え、設定ファイル・hbm.xml の
class nameと一字一句比べる - ビルド後の出力先(
WEB-INF/classesや jar の中)に hbm.xml が含まれているか確認する。Maven では hbm.xml をsrc/main/resources側に置かないとコピーされないことがある - 起動ログに、マッピングを読み込んだクラスの一覧が出ているか確認する(出ていなければ Hibernate のログレベルを INFO や DEBUG にして確認する)
- 修正後、アプリケーションを再起動して SessionFactory を作り直す(ホットデプロイでは反映されない場合がある)
関連
- Hibernateとは|JavaのORMライブラリとJPA参照実装の基礎
- Hibernate QuerySyntaxException: table_name is not mapped 対処
- Spring Framework のよくあるエラー一覧と対処法
- JavaのDB接続|JDBCでMySQL・PostgreSQLなどRDBに接続する方法
子ページはありません
- ids for this class must be manually assigned before calling save()
- Number of positional parameter types (1 does not match number of positional parameters (2)
- net.sf.hibernate.MappingException: No persister for ~
- net.sf.hibernate.QueryException: unexpected token: as [~]
- net.sf.hibernate.MappingException: Error reading resource
- IllegalArgumentException occurred while calling setter of
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56