teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

バージョン違いを検出。不要な記載があることも追記。

2017/06/29 23:40

投稿

A-pZ
A-pZ

スコア12011

answer CHANGED
@@ -1,1 +1,68 @@
1
- NoSuchMethodErrorが出ているので、おそらく、Hibernateと利用されている依存ライブラリのバージョンにズレがあるのではないでしょうか。pom.xmlがあると、より正確な回答が得られるかもしれません。
1
+ NoSuchMethodErrorが出ているので、おそらく、Hibernateと利用されている依存ライブラリのバージョンにズレがあるのではないでしょうか。pom.xmlがあると、より正確な回答が得られるかもしれません。
2
+
3
+ 6/30 追記:バージョンにズレがあり、かつpersistence.xmlに不要な値が含まれているのを確認しました。
4
+
5
+ pom.xmlについて
6
+
7
+ 今回動かされているEntityまでのコードを見たところ、単純にサーブレットからHibernate-JPAを実行しているだけなので、Hibernate 5.2.10ならびにそれに対応しているhibernate-commons-annotationだけで十分です。
8
+ そのほかは、MySQL用JDBCドライバ、hibernate内のログ出力がSLF4Jを使っているので、SLF4Jを追加しています。
9
+ ```xml
10
+ <dependency>
11
+ <groupId>org.hibernate</groupId>
12
+ <artifactId>hibernate-core</artifactId>
13
+ <version>5.2.10.Final</version>
14
+ </dependency
15
+ <dependency>
16
+ <groupId>org.hibernate.common</groupId>
17
+ <artifactId>hibernate-commons-annotations</artifactId>
18
+ <version>5.0.1.Final</version>
19
+ </dependency>>
20
+ <dependency>
21
+ <groupId>mysql</groupId>
22
+ <artifactId>mysql-connector-java</artifactId>
23
+ <version>5.1.42</version>
24
+ </dependency>
25
+ <dependency>
26
+ <groupId>org.slf4j</groupId>
27
+ <artifactId>slf4j-api</artifactId>
28
+ <version>1.7.25</version>
29
+ </dependency>
30
+ <dependency>
31
+ <groupId>org.slf4j</groupId>
32
+ <artifactId>slf4j-simple</artifactId>
33
+ <version>1.7.25</version>
34
+ </dependency>
35
+ ```
36
+
37
+ persistence.xmlについて
38
+
39
+ こちらもいろいろ書かれていますが、導入されているHibernateのバージョンならびに実行されているDAO~Entityを見た限り、以下のJDBC接続設定が必須で、それ以外にSQLの出力などは任意で設定してください。
40
+
41
+ ```xml
42
+ <persistence xmlns="http://java.sun.com/xml/ns/persistence"
43
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
45
+ version="2.0">
46
+ <persistence-unit name="java-restaurant">
47
+ <properties>
48
+ <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
49
+ <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test" />
50
+ <property name="javax.persistence.jdbc.user" value="root" />
51
+ <property name="javax.persistence.jdbc.password" value="password" />
52
+ </properties>
53
+ </persistence-unit>
54
+ </persistence>
55
+ ```
56
+
57
+ 他に注意すべきこと:
58
+ 不要なクラスが張られているのと、EntityManagerを取得するために実装されている親クラスが張られていません。
59
+
60
+ 今回のケースで言えば、張るべきクラスは次の3つです。
61
+
62
+ * PreUserDAO
63
+ * PreUserEntity
64
+ * PreUserDAOが継承しているクラス(これが書かれていない)
65
+
66
+ 検証に不要なクラスは張らず、問題となっている箇所を絞っておくのも大事なことなのではないかと思います。
67
+
68
+ なお、これらの修正をすると、クラスが参照できない問題は解決されますが、Entityに定義しているJPQLやentityが正しく読み込めなくなるケースがあるかも知れません。それはこの質問の範疇から外れますので、別途質問を立ち上げるのが良いでしょう。