| この記事の要点 |
|
エラー内容
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・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09