【エラー解決方法】Entity追加時にMappingException Unknown entityが発生!?を解決する方法

こんにちは、飯塚です。
 
JavaとHibernateの構成で、Entityを新しく追加したときにExceptionが発生することがあります。結論から言うと、orm.xmlにパスを追加すれば解決しますが、原因を含めてまとめました。
 
環境は以下の通りです。

OS
Windows 10
言語
Java 8
O/Rマッパー
Hibernate 5.4.1

エラー内容(org.hibernate.MappingException: Unknown entity)

Entityを新規追加後にプログラムを実行すると、下記のエラーが発生することがあります。データベースのテーブルと追加したEntityのマッピング(紐づけ)ができていない、という内容です。

org.hibernate.MappingException: Unknown entity

解決方法(orm.xmlにEntityのパスを追加)

解決方法はいくつかありますが、ここではorm.xmlを使ってマッピングする構成を想定します。META-INF/orm.xmlに対象のEntityのパスを追加するだけで解消します。

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1"
        xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm
                            http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd">
    <package>com.xxx</package>
    <entity class="com.xxx.entity.XXXEntity" />
</entity-mappings>

用語の整理(Hibernate/JPA/O/Rマッパー)

Exceptionに出てきた単語や関連するキーワードをまとめました。用語の意味が分かると、エラー内容や対応方法も理解しやすいです。

用語 読み方 意味
Hibernate ハイバネート Javaとリレーショナルデータベースで「O/Rマッピング」を実現するため設計された、オープンソースソフトウェア
JPA ジェーピーエー Java Persistence APIの略。オブジェクトとデータベースを紐づけるためのJava標準のAPI。JPAは仕様であり、JPAを実装した代表格がHibernate
O/Rマッパー オーアールマッパー Object / Relational Mappingの略称。ORMと略されることもある。オブジェクト指向言語で扱う「オブジェクト」と「リレーショナルデータベース(RDB)のレコード」をマッピング(対応付け)すること

(参考記事)
O/Rマッピングの役割とメリット
Hibernate とは?

解説

JPAはオブジェクトのデータベースのマッピング方法を2つ提供しています。
・アノテーション
・XMLを使ったマッピング
 
そのため、「org.hibernate.MappingException: Unknown entity」が発生した場合には、どちらかの指定が誤っていると考えられます。基本的にどちらかの方法で統一しているはずなので、使っているプロジェクトのマッピング方法を確認すれば、解決できると思います。
 
(参考記事)
Hibernate ORM 5.1 User Guide

まとめ

いかがでしたでしょうか。
 
知っていればすぐに解決できるエラーですが、そもそも「Hibernate」や「O/Rマッパー」といった用語を知らないと、調査に時間がかかるエラーだと思います。私自身も、最初にこのエラーを見たときは、エラーの内容が全く分からず、先輩に教えていただき解決しました。
 
Hibernate関係のExceptionは、知らないと解決が難しいエラーが少なくないので、今後も解決法を書いていくつもりです。
 
 
 
 
《関連記事》

GenericJDBCException Could not open connection エラー発生
技術
2018.11.28(Wed)

【エラー解決方法】GenericJDBCException Could not open connection エラー発生!? を解決する方法

#データベース#SQL
 

RDBを簡単に扱えるHibernateのすすめ
技術
2019.8.21(Wed)

CODEMATIC Java版でも利用してます! RDBを簡単に扱えるHibernateのすすめ

#Java#CODEMATIC#データベース
 

記事をシェア
MOST VIEWED ARTICLES