質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java Persistence API

Java Persistance Acchitecture API (JPA) はJavaオブジェクト・クラスとリレーショナルデータベースとの間のデータへのアクセス、管理、維持を行う為のJava用のフレームワークです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

受付中

JPAでUnable to configure EntityManagerFactoryが発生する

Linkey
Linkey

総合スコア77

Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java Persistence API

Java Persistance Acchitecture API (JPA) はJavaオブジェクト・クラスとリレーショナルデータベースとの間のデータへのアクセス、管理、維持を行う為のJava用のフレームワークです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

0回答

0評価

0クリップ

218閲覧

投稿2022/01/27 14:17

Javaを勉強しているものです。
EclipseでMavenプロジェクトを作成してJPAを使ってMariaDBに接続確認を行っています。
しかし、Persistence.createEntityManagerFactoryのところでUnable to configure EntityManagerFactoryが発生してしまいます。

実施した手順は以下です。
1./src/main/resources/にMETA-INFという名前のフォルダーを作成する。

2./src/main/resources/META-INFフォルダにpersistence.xmlファイルを作成する
persistence.xml

xml

<?xml version="1.0"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="mariaDbPersistenceUnit"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <mapping-file>META-INF/orm.xml</mapping-file> <class>sample4.entity.User</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDBDialect" /> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.connection.driver_class" value="org.mariadb.jdbc.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/test" /> <property name="hibernate.connection.username" value="hogeuser"/> <property name="hibernate.connection.password" value="password"/> <property name="show_sql" value="true"/> </properties> </persistence-unit> </persistence>

3./src/main/resources/META-INFフォルダにorm.xmlを作成する

xml

<?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"> <named-query name="findUserById"> <query><![CDATA[ SELECT u FROM User u WHERE u.id = :id ]]></query> </named-query> </entity-mappings>

4.DBアクセス処理を実装する

java

package sample4.dao; import java.util.List; import java.util.Objects; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.TypedQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sample4.entity.User; public class UserDao { private static final Logger logger = LoggerFactory.getLogger(UserDao.class); /** * 指定のテーブルから全レコードを取得します。 * @return 全レコード * @throws Exception */ public List<User> findAll() throws Exception { logger.info("UserDao findAll Start"); EntityManagerFactory emf = null; EntityManager entityManager = null; try { emf = Persistence.createEntityManagerFactory("mariaDbPersistenceUnit"); entityManager = emf.createEntityManager(); TypedQuery<User> query = entityManager.createNamedQuery("User.findAll", User.class); List<User> employeeList = query.getResultList(); return employeeList; } catch (Exception e) { e.printStackTrace(); throw e; } finally { if(Objects.nonNull(entityManager)) { entityManager.close(); } if(Objects.nonNull(emf)) { emf.close(); } logger.info("UserDao findAll End"); } } }

5.動作確認するが以下のエラーとなる。

javax.persistence.PersistenceException: Unable to configure EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:386) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:58) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) at sample4.dao.UserDao.findAll(UserDao.java:54) at sample4.service.UserService.findUsers(UserService.java:30) at sample4.servlet.Path3Servlet.doGet(Path3Servlet.java:41) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:832) Caused by: java.lang.RuntimeException: Error while reading file:/C:/pleiades/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/sample4/WEB-INF/classes/ at org.hibernate.ejb.packaging.NativeScanner.getClassesInJar(NativeScanner.java:131) at org.hibernate.ejb.Ejb3Configuration.addScannedEntries(Ejb3Configuration.java:486) at org.hibernate.ejb.Ejb3Configuration.addMetadataFromScan(Ejb3Configuration.java:476) at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362) ... 29 more Caused by: java.io.IOException: invalid constant type: 18 at javassist.bytecode.ConstPool.readOne(ConstPool.java:1113) at javassist.bytecode.ConstPool.read(ConstPool.java:1056) at javassist.bytecode.ConstPool.<init>(ConstPool.java:150) at javassist.bytecode.ClassFile.read(ClassFile.java:765) at javassist.bytecode.ClassFile.<init>(ClassFile.java:109) at org.hibernate.ejb.packaging.AbstractJarVisitor.checkAnnotationMatching(AbstractJarVisitor.java:246) at org.hibernate.ejb.packaging.AbstractJarVisitor.executeJavaElementFilter(AbstractJarVisitor.java:212) at org.hibernate.ejb.packaging.AbstractJarVisitor.addElement(AbstractJarVisitor.java:173) at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:126) at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:134) at org.hibernate.ejb.packaging.ExplodedJarVisitor.getClassNamesInTree(ExplodedJarVisitor.java:134) at org.hibernate.ejb.packaging.ExplodedJarVisitor.doProcessElements(ExplodedJarVisitor.java:92) at org.hibernate.ejb.packaging.AbstractJarVisitor.getMatchingEntries(AbstractJarVisitor.java:149) at org.hibernate.ejb.packaging.NativeScanner.getClassesInJar(NativeScanner.java:128) ... 32 more

C:/pleiades/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/sample4/WEB-INF/classes/にはMETA-INFがあり、META-INFフォルダにはpersistence.xmlとorm.xmlが入っています。
イメージ説明

あとorm.xmlにエラーが出ていてマーカーには「Mapping file orm.xml does not have supported content for this JPA platform. orm.xml /sample4/src/main/resources/META-INF」と表示されてしまいます。
イメージ説明

問題解決のためいろいろと調べていますが、未だに解決できません。
perisistence.xmlとorm.xmlの配置場所が良くないのでしょうか?
peristence.xmlとorm.xmlの設定に詳しい方がいましたらご回答いただけないでしょうか?
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Linkey

2022/01/28 11:32

java.io.IOException: invalid constant type: 18というエラーが出ていたため調べたところ以下のサイトに記載があるようにpom.xmlにjavaasssitを追加しました。 https://www.netsurfingzone.com/orika-mapping-exception-java-io-ioexception-invalid-constant-type-18-at-55/ <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.23.1-GA</version> </dependency> persistence.xmlでhibernate.dialectをorg.hibernate.dialect.MariaDBDialectとしていましたが、org.hibernate.dialect.MySQL5Dialectに変更したところMariaDBへのアクセスができるようになりました。orm.xmlですが、orm.xmlのファイルを修正するとマーカーが消えてmaven→プロジェクト更新を実行するとマーカーが表示されてしまいます。あとはorm.xmlのマーカーの問題が残っています。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Hibernate

HibernateとはJava言語のobject-relational mapping (ORM)ライブラリであり、Object/Relational Mappingよりはるか多くの方法でアプリケーションをPOJOで機能付けることができます。

Java Persistence API

Java Persistance Acchitecture API (JPA) はJavaオブジェクト・クラスとリレーショナルデータベースとの間のデータへのアクセス、管理、維持を行う為のJava用のフレームワークです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ORM

ORM(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。