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