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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Hibernate

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

解決済

1回答

8225閲覧

EntityManagerがうまく設定されない

Linkey

総合スコア77

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Hibernate

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

1クリップ

投稿2017/06/25 08:58

編集2017/06/29 12:12

https://teratail.com/questions/75995が見づらくなってしまったため新しく質問させていただきます。JavaでMavenプロジェクトを使ってWebアプリケーションの開発をしているのですが、EntityManagerの設定がうまくいかず、ServletExceptionが発生してしまいました。
EntityManagerの設定は「https://stackoverflow.com/questions/4543947/when-should-entitymanagerfactory-instance-be-created-opened」を参考にしています。
実装内容またはファイルの設定内容は以下の通りです。

発生している現象:
実行した時に発生するエラー
コンソール出力内容

persistence.xmlの中身
配置場所:/java-restaurant/src/main/resources/META-INF/persistence.xml
イメージ説明

サーブレット
イメージ説明
イメージ説明
イメージ説明
イメージ説明

コントローラークラス
イメージ説明

ビジネスロジッククラス
イメージ説明

DAOクラス

java

1package registration.dao; 2 3import java.io.Closeable; 4import java.io.IOException; 5import java.util.List; 6 7import javax.persistence.EntityManager; 8import javax.persistence.EntityTransaction; 9import javax.persistence.TypedQuery; 10 11import registration.entity.PreUserEntity; 12import util.dao.EmProvider; 13import util.dao.ResourceDAO; 14 15/** 16 * 仮ユーザーテーブルにアクセスする 17 * 18 * @author user 19 * 20 */ 21public class PreUserDAO implements Closeable, ResourceDAO { 22 23 private final static String SQL_FIND_ALL_PRE_USER_ID = "PreUser.findAllPreUserId"; 24 25 //@Inject 26 private EntityManager em = null; 27 EntityTransaction et = null; 28 29 /** 30 * 発番された仮会員IDがテーブルに存在するかどうかを確認する 31 */ 32 public void findAllPreUserId() { 33 34 EntityManager em = null; 35 try { 36 37 em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager(); 38 39 if(em == null){ 40 System.out.println("emの設定に失敗"); 41 } 42 43 TypedQuery<PreUserEntity> query = em.createNamedQuery(SQL_FIND_ALL_PRE_USER_ID, PreUserEntity.class); 44 45 if(query == null){ 46 System.out.println("検索結果のマッピングに失敗"); 47 } 48 49 List<PreUserEntity> entity = query.getResultList(); 50 51 if(entity.size() != 0){ 52 System.out.println("検索成功しました。"); 53 } else { 54 System.out.println("検索結果に失敗しました。"); 55 } 56 } 57 catch(Exception e) { 58 e.printStackTrace(); 59 } 60 finally { 61 if(em != null) { 62 em.close(); 63 } 64 EmProvider.getInstance().closeEmf(); 65 } 66 } 67 68 @Override 69 public void close() throws IOException { 70 if (em != null) { 71 em.close(); 72 } 73 } 74}

Entityクラス

java

1package registration.entity; 2 3import java.io.Serializable; 4import java.util.Date; 5 6import javax.persistence.Column; 7import javax.persistence.Entity; 8import javax.persistence.Id; 9import javax.persistence.Table; 10import javax.persistence.Temporal; 11import javax.persistence.TemporalType; 12 13import org.hibernate.annotations.NamedQueries; 14import org.hibernate.annotations.NamedQuery; 15 16/** 17 * The persistent class for the pre_user database table. 18 * 19 */ 20@Entity 21@Table(name = "pre_user") 22@NamedQueries({ 23 @NamedQuery(name = "PreUser.findAllPreUserId", query = "SELECT p FROM pre_user p"), 24 @NamedQuery(name = "PreUser.findAllPreCostomerId", query = "SELECT NEW registration.entity.PreUserEntity (p.preCustomerId) FROM pre_user p") 25}) 26 27public class PreUserEntity implements Serializable { 28 29 private static final long serialVersionUID = 1L; 30 31 @Id 32 @Column(name="pre_customer_id") 33 private String preCustomerId; 34 35 @Column(name="process_name") 36 private String processName; 37 38 @Column(name="process_status") 39 private String processStatus; 40 41 @Temporal(TemporalType.TIMESTAMP) 42 @Column(name="register_time") 43 private Date registerTime; 44 45 @Column(name="register_user") 46 private String registerUser; 47 48 @Temporal(TemporalType.TIMESTAMP) 49 @Column(name="update_time") 50 private Date updateTime; 51 52 @Column(name="update_user") 53 private String updateUser; 54 55 public PreUserEntity() { 56 } 57 58 public PreUserEntity(String preCostomerId) { 59 this.preCustomerId = preCostomerId; 60 } 61 62 public String getPreCustomerId() { 63 return this.preCustomerId; 64 } 65 66 public void setPreCustomerId(String preCustomerId) { 67 this.preCustomerId = preCustomerId; 68 } 69 70 public String getProcessName() { 71 return this.processName; 72 } 73 74 public void setProcessName(String processName) { 75 this.processName = processName; 76 } 77 78 public String getProcessStatus() { 79 return this.processStatus; 80 } 81 82 public void setProcessStatus(String processStatus) { 83 this.processStatus = processStatus; 84 } 85 86 public Date getRegisterTime() { 87 return this.registerTime; 88 } 89 90 public void setRegisterTime(Date registerTime) { 91 this.registerTime = registerTime; 92 } 93 94 public String getRegisterUser() { 95 return this.registerUser; 96 } 97 98 public void setRegisterUser(String registerUser) { 99 this.registerUser = registerUser; 100 } 101 102 public Date getUpdateTime() { 103 return this.updateTime; 104 } 105 106 public void setUpdateTime(Date updateTime) { 107 this.updateTime = updateTime; 108 } 109 110 public String getUpdateUser() { 111 return this.updateUser; 112 } 113 114 public void setUpdateUser(String updateUser) { 115 this.updateUser = updateUser; 116 } 117}

pom.xmlの中身

xml

1<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.sample.mvnproject</groupId> 5 <artifactId>java-restaurant</artifactId> 6 <packaging>war</packaging> 7 <version>0.0.1-SNAPSHOT</version> 8 <name>java-restaurant Maven Webapp</name> 9 <url>http://maven.apache.org</url> 10 <properties> 11 <hibernate.version>4.3.10.Final</hibernate.version> 12 </properties> 13 <dependencies> 14 <dependency> 15 <groupId>junit</groupId> 16 <artifactId>junit</artifactId> 17 <version>3.8.1</version> 18 <scope>test</scope> 19 </dependency> 20 <!-- added servlet info --> 21 <dependency> 22 <groupId>javax.servlet</groupId> 23 <artifactId>javax.servlet-api</artifactId> 24 <version>3.1.0</version> 25 </dependency> 26 <!-- added JSP info --> 27 <dependency> 28 <groupId>javax.servlet</groupId> 29 <artifactId>jstl</artifactId> 30 <version>1.2</version> 31 </dependency> 32 <!-- added JSTL info --> 33 <dependency> 34 <groupId>javax.servlet.jsp</groupId> 35 <artifactId>javax.servlet.jsp-api</artifactId> 36 <version>2.3.1</version> 37 </dependency> 38 <!-- added mockit for ut --> 39 <dependency> 40 <groupId>org.mockito</groupId> 41 <artifactId>mockito-all</artifactId> 42 <version>1.9.5</version> 43 </dependency> 44 <!-- added Hibernate info --> 45 <dependency> 46 <groupId>org.hibernate</groupId> 47 <artifactId>hibernate-annotations</artifactId> 48 <version>3.5.6-Final</version> 49 </dependency> 50 <dependency> 51 <groupId>org.hibernate</groupId> 52 <artifactId>hibernate-core</artifactId> 53 <version>5.2.10.Final</version> 54 </dependency> 55 <dependency> 56 <groupId>org.eclipse.persistence</groupId> 57 <artifactId>org.eclipse.persistence.jpa</artifactId> 58 <version>2.6.4</version> 59 </dependency> 60 <dependency> 61 <groupId>org.springframework</groupId> 62 <artifactId>spring-webmvc</artifactId> 63 <version>4.3.8.RELEASE</version> 64 </dependency> 65 <!-- added MySQL Connector Info --> 66 <dependency> 67 <groupId>mysql</groupId> 68 <artifactId>mysql-connector-java</artifactId> 69 <version>5.1.42</version> 70 </dependency> 71 <!-- added log4j info --> 72 <dependency> 73 <groupId>org.apache.logging.log4j</groupId> 74 <artifactId>log4j-core</artifactId> 75 <version>2.7</version> 76 </dependency> 77 <dependency> 78 <groupId>org.apache.logging.log4j</groupId> 79 <artifactId>log4j-api</artifactId> 80 <version>2.7</version> 81 </dependency> 82 <dependency> 83 <groupId>org.hibernate.javax.persistence</groupId> 84 <artifactId>hibernate-jpa-2.1-api</artifactId> 85 <version>1.0.0.Final</version> 86 </dependency> 87 <!-- added jBcrypt --> 88 <dependency> 89 <groupId>org.mindrot</groupId> 90 <artifactId>jbcrypt</artifactId> 91 <version>0.4</version> 92 </dependency> 93 <!-- persistence --> 94 </dependencies> 95 <build> 96 <finalName>java-restaurant</finalName> 97 <plugins> 98 <plugin> 99 <groupId>org.apache.maven.plugins</groupId> 100 <artifactId>maven-compiler-plugin</artifactId> 101 <version>3.1</version> 102 <configuration> 103 <source>1.8</source> 104 <target>1.8</target> 105 <encoding>UTF-8</encoding> 106 </configuration> 107 </plugin> 108 <!-- added tomcat maven plugin info --> 109 <plugin> 110 <groupId>org.apache.tomcat.maven</groupId> 111 <artifactId>tomcat7-maven-plugin</artifactId> 112 <version>2.2</version> 113 <configuration> 114 <path>/foo</path> 115 <server>tomcat-localhost</server> 116 <url>http://localhost:8080/manager/text</url> 117 </configuration> 118 </plugin> 119 </plugins> 120 </build> 121</project>

JPA、Hibernateにお詳しい方がいましたら、または原因に当たりがついた方がいらっしゃいましたらご回答をお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

NoSuchMethodErrorが出ているので、おそらく、Hibernateと利用されている依存ライブラリのバージョンにズレがあるのではないでしょうか。pom.xmlがあると、より正確な回答が得られるかもしれません。

6/30 追記:バージョンにズレがあり、かつpersistence.xmlに不要な値が含まれているのを確認しました。

pom.xmlについて

今回動かされているEntityまでのコードを見たところ、単純にサーブレットからHibernate-JPAを実行しているだけなので、Hibernate 5.2.10ならびにそれに対応しているhibernate-commons-annotationだけで十分です。
そのほかは、MySQL用JDBCドライバ、hibernate内のログ出力がSLF4Jを使っているので、SLF4Jを追加しています。

xml

1 <dependency> 2 <groupId>org.hibernate</groupId> 3 <artifactId>hibernate-core</artifactId> 4 <version>5.2.10.Final</version> 5 </dependency 6 <dependency> 7 <groupId>org.hibernate.common</groupId> 8 <artifactId>hibernate-commons-annotations</artifactId> 9 <version>5.0.1.Final</version> 10 </dependency>> 11 <dependency> 12 <groupId>mysql</groupId> 13 <artifactId>mysql-connector-java</artifactId> 14 <version>5.1.42</version> 15 </dependency> 16 <dependency> 17 <groupId>org.slf4j</groupId> 18 <artifactId>slf4j-api</artifactId> 19 <version>1.7.25</version> 20 </dependency> 21 <dependency> 22 <groupId>org.slf4j</groupId> 23 <artifactId>slf4j-simple</artifactId> 24 <version>1.7.25</version> 25 </dependency>

persistence.xmlについて

こちらもいろいろ書かれていますが、導入されているHibernateのバージョンならびに実行されているDAO~Entityを見た限り、以下のJDBC接続設定が必須で、それ以外にSQLの出力などは任意で設定してください。

xml

1<persistence xmlns="http://java.sun.com/xml/ns/persistence" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 4 version="2.0"> 5 <persistence-unit name="java-restaurant"> 6 <properties> 7 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 8 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test" /> 9 <property name="javax.persistence.jdbc.user" value="root" /> 10 <property name="javax.persistence.jdbc.password" value="password" /> 11 </properties> 12 </persistence-unit> 13</persistence>

他に注意すべきこと:
不要なクラスが張られているのと、EntityManagerを取得するために実装されている親クラスが張られていません。

今回のケースで言えば、張るべきクラスは次の3つです。

  • PreUserDAO
  • PreUserEntity
  • PreUserDAOが継承しているクラス(これが書かれていない)

検証に不要なクラスは張らず、問題となっている箇所を絞っておくのも大事なことなのではないかと思います。

なお、これらの修正をすると、クラスが参照できない問題は解決されますが、Entityに定義しているJPQLやentityが正しく読み込めなくなるケースがあるかも知れません。それはこの質問の範疇から外れますので、別途質問を立ち上げるのが良いでしょう。

投稿2017/06/25 09:46

編集2017/06/29 23:40
A-pZ

総合スコア12011

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

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

Linkey

2017/06/25 14:07

コメントありがとうございます。pom.xmlの中身を追加しましたのでご確認いただけないでしょうか?
A-pZ

2017/06/25 15:24

せっかくスクリーンショットを貼っていただいて恐縮なのですが、これならそのままpom.xmlの内容をコピー&ペーストして、コードブロック ``` で囲うだけで綺麗に表示されます。検証するにしてもスクリーンショットでは間違いに気づきにくいので、テキストやコードで記載してる部分はコードブロックで記載しなおした方が、検証もしやすくなります。
Linkey

2017/06/26 14:59

ご回答ありがとうございます。実際にコードブロックで囲ってやると文字数制限を超えてしまい投稿ができてなくなってしまったためスクリーンショットを貼りました。行番号がなくて見づらいですがpom.xmlの記載内容は以下の通りです。 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sample.mvnproject</groupId> <artifactId>java-restaurant</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>java-restaurant Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <hibernate.version>4.3.10.Final</hibernate.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- added servlet info --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!-- added JSP info --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- added JSTL info --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> </dependency> <!-- added mockit for ut --> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.9.5</version> </dependency> <!-- added Hibernate info --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.6-Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa</artifactId> <version>2.6.4</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.8.RELEASE</version> </dependency> <!-- added MySQL Connector Info --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version> </dependency> <!-- added log4j info --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency> <!-- added jBcrypt --> <dependency> <groupId>org.mindrot</groupId> <artifactId>jbcrypt</artifactId> <version>0.4</version> </dependency> <!-- persistence --> </dependencies> <build> <finalName>java-restaurant</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- added tomcat maven plugin info --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/foo</path> <server>tomcat-localhost</server> <url>http://localhost:8080/manager/text</url> </configuration> </plugin> </plugins> </build> </project>
Linkey

2017/06/29 12:12

pom.xmlの中身を記載しました。ご確認いただけますでしょうか?
A-pZ

2017/06/29 23:13

原因はわかりますが、ここでは書ききれませんので、解答を編集しました。
ahodana

2017/06/29 23:33

org.eclipse.persistence.jpa とhibernate.jpa 最低2つ混在してるな(笑)
Linkey

2017/06/30 16:31

回答ありがとうございます。言葉の意味が理解できていない箇所があります。 「不要なクラスが張られているのと、EntityManagerを取得するために実装されている親クラスが張られていません。」というところのクラスを貼るというのはどういうことでしょうか?
A-pZ

2017/06/30 17:07

より具体的に言いますと、「ResourceDAO」がこの質問に張られてなく、EntityManagerを取得している実装がないので、そこまではわかりませんよ、ということです。大変失礼しました。
Linkey

2017/07/06 16:04

ご回答ありがとうございました。アドバイスいただいた内容を反映させてみたところ、500エラーは解消されました。現在はクエリでエラーが発生しており今回の問題とは別の箇所で問題が発生していますがそちらについて別途質問スレッドを立ち上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問