【エラー解決方法】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は、知らないと解決が難しいエラーが少なくないので、今後も解決法を書いていくつもりです。
《関連記事》