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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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(オブジェクト関係マッピング)はオブジェクト指向のシステムとリレーショナルデータベースの間でマッピングを行う技術です。

Q&A

0回答

915閲覧

JPAでUnable to configure EntityManagerFactoryが発生する

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クリップ

投稿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

1<?xml version="1.0"?> 2<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 4 <persistence-unit name="mariaDbPersistenceUnit"> 5 <provider>org.hibernate.ejb.HibernatePersistence</provider> 6 <mapping-file>META-INF/orm.xml</mapping-file> 7 <class>sample4.entity.User</class> 8 <properties> 9 <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDBDialect" /> 10 <property name="hibernate.hbm2ddl.auto" value="update"/> 11 <property name="hibernate.connection.driver_class" value="org.mariadb.jdbc.Driver" /> 12 <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:3306/test" /> 13 <property name="hibernate.connection.username" value="hogeuser"/> 14 <property name="hibernate.connection.password" value="password"/> 15 <property name="show_sql" value="true"/> 16 </properties> 17 </persistence-unit> 18</persistence>

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

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<entity-mappings version="2.1" 3 xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd"> 5 <named-query name="findUserById"> 6 <query><![CDATA[ 7 SELECT 8 u 9 FROM 10 User u 11 WHERE 12 u.id = :id 13 ]]></query> 14 </named-query> 15</entity-mappings>

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

java

1package sample4.dao; 2 3import java.util.List; 4import java.util.Objects; 5 6import javax.persistence.EntityManager; 7import javax.persistence.EntityManagerFactory; 8import javax.persistence.Persistence; 9import javax.persistence.TypedQuery; 10 11import org.slf4j.Logger; 12import org.slf4j.LoggerFactory; 13 14import sample4.entity.User; 15 16public class UserDao { 17 18 private static final Logger logger = LoggerFactory.getLogger(UserDao.class); 19 20 /** 21 * 指定のテーブルから全レコードを取得します。 22 * @return 全レコード 23 * @throws Exception 24 */ 25 public List<User> findAll() throws Exception { 26 logger.info("UserDao findAll Start"); 27 28 EntityManagerFactory emf = null; 29 EntityManager entityManager = null; 30 try { 31 emf = Persistence.createEntityManagerFactory("mariaDbPersistenceUnit"); 32 entityManager = emf.createEntityManager(); 33 TypedQuery<User> query = entityManager.createNamedQuery("User.findAll", User.class); 34 List<User> employeeList = query.getResultList(); 35 return employeeList; 36 } catch (Exception e) { 37 e.printStackTrace(); 38 throw e; 39 } finally { 40 if(Objects.nonNull(entityManager)) { 41 entityManager.close(); 42 } 43 44 if(Objects.nonNull(emf)) { 45 emf.close(); 46 } 47 logger.info("UserDao findAll End"); 48 } 49 } 50} 51

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の設定に詳しい方がいましたらご回答いただけないでしょうか?
よろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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のマーカーの問題が残っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問