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

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

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

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

Hibernate

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

Java

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

Q&A

解決済

8回答

15060閲覧

EntityManagerの初期化はできているが検索メソッドが呼ばれない

Linkey

総合スコア77

XML

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

Hibernate

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

Java

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

1グッド

0クリップ

投稿2017/05/13 04:56

編集2017/06/15 15:56

DAOクラスから特定のテーブルを検索するメソッドを実装して動かしているのですが検索メソッド(findAllPreUserId)が呼ばれません。System.out.printを使ってどこまで処理が動いているのか確認したところEntityManagerの初期化はできていそうに見えます。(もしできていなければ「PersisitenceExceptionで「Unable to build Hibernate SessionFactory」という趣旨のエラーが発生する認識です。)

実際に動かしてみるとコンソールは以下のようになります。
イメージ

影響ありそうな箇所は確認しましたが特に設定ミス等はなさそうなのですが、JPA、Hibernateにお詳しい方がいましたら、ご回答をお願いいたします。

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.Persistence; 10 11import registration.entity.PreUserEntity; 12import util.dao.ResourceDAO; 13 14/** 15 * 仮ユーザーテーブルにアクセスする 16 * 17 * @author user 18 * 19 */ 20public class PreUserDAO implements Closeable, ResourceDAO { 21 22 final static String COMPLETED = "Comleted"; 23 private final static String SQL_FIND_ALL_PRE_COSTOMER_ID = "PreUser.findAllPreCostomerId"; 24 25 EntityManager em = null; 26 EntityTransaction et = null; 27 28 public PreUserDAO() { 29 System.out.println("entityManagerの設定"); 30 em = Persistence.createEntityManagerFactory("restaurant").createEntityManager(); 31 } 32 33 /** 34 * 仮ユーザーテーブルにレコードを挿入します 35 * 36 * @param preCostomerId 37 */ 38 @Override 39 public void insert(String preCostomerId, String processName) { 40 //TODO 未実装 41 } 42 43 44 //仮ユーザIDを検索して取得します 45 public void findAllPreUserId() { 46 System.out.println("検索を始めます"); 47 List<PreUserEntity> entity = em.createQuery(SQL_FIND_ALL_PRE_COSTOMER_ID, PreUserEntity.class).getResultList(); 48 49 if (entity.size() != 0) { 50 System.out.println("検索成功"); 51 } else { 52 System.out.println("検索失敗"); 53 } 54 em.close(); 55 } 56 57 @Override 58 public void close() throws IOException { 59 if (em != null) { 60 em.close(); 61 } 62 } 63} 64

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 118}

呼び出し元のビジネスロジッククラス

Java

1package registration.business_logic; 2 3import java.io.IOException; 4import java.util.Random; 5 6import registration.dao.PreUserDAO; 7 8public class RegistrationBusinessLogic { 9 PreUserDAO dao = null; 10 public void gettingPreUserIdFromDatabase() throws IOException { 11 try { 12 dao = new PreUserDAO(); 13 System.out.println("仮会員テーブルを検索します"); 14 dao.findAllPreUserId(); 15 } finally { 16 dao.close(); 17 } 18 } 19}

コントローラー

Java

1package registration.controller; 2 3import java.util.logging.Logger; 4 5import org.apache.logging.log4j.LogManager; 6 7import registration.business_logic.RegistrationBusinessLogic; 8 9public class RegistrationController { 10 static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); 11 private RegistrationBusinessLogic logic = null; 12 13 public RegistrationController(){ 14 15 } 16 //ここで例外処理を行う 17 public void invoke(String process_code){ 18 19 try { 20 //DAOクラスを呼び出す 21 //まずは仮会員IDを発番させる 22 logic = new RegistrationBusinessLogic(); 23 logic.gettingPreUserIdFromDatabase(); 24 System.out.println("テーブル検索が完了しました"); 25 26 } catch (Exception e) { 27 //TODO 未実装 28 } 29 } 30 31} 32

persistence..xml

XML

1<?xml version="1.0" encoding="UTF-8"?> 2<persistence 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" xmlns="http://java.sun.com/xml/ns/persistence"> 5 6 <!-- MySQL + TOMCAT--> 7 <persistence-unit name="restaurant" transaction-type="RESOURCE_LOCAL"> 8 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 9 <exclude-unlisted-classes>false</exclude-unlisted-classes> 10 <properties> 11 <!-- DAOS --> 12 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 13 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/restaurant?useSSL=false" /> 14 <property name="javax.persistence.jdbc.user" value="administrator" /> 15 <property name="javax.persistence.jdbc.password" value="password" /> 16 <!-- Configuration--> 17 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 18 <property name="hibernate.hbm2ddl.auto" value="update"/> 19 <property name="hibernate.show_sql" value="true"/> 20 <property name="hibernate.format_sql" value="true"/> 21 <property name="hibernate.archive.autodetection" value="class"/> 22 </properties> 23 </persistence-unit> 24 25 <!-- JUnit MYSQL --> 26 <!-- 27 <persistence-unit name="restaurant"> 28 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 29 <properties> 30 <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 31 <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 32 <property name="hibernate.connection.release_mode" value="after_transaction"/> 33 <property name="hibernate.connection.username" value="administrator"/> 34 <property name="hibernate.connection.password" value="password"/> 35 <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/restaurant?useSSL=false"/> 36 </properties> 37 </persistence-unit> 38 --> 39</persistence>

※以下のクラスを作成したところ、エラーを出しつつ、
Daoクラスの検索処理からロジック処理に戻ってきたことを確認できました。
新規作成クラス:
イメージ説明

DaoクラスのfindAllPreUserIdメソッドを以下のように修正
イメージ説明
実行後のコンソール
イメージ説明

teru_0731👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/05/15 16:36

BLを呼び出すコントローラも記載していただけますか?
Linkey

2017/05/16 15:43

コントローラを追加しました
退会済みユーザー

退会済みユーザー

2017/06/13 13:54

できればEmProviderを行番号を付加して見せていただきたいです。たぶんif文のemfがnullなのではないかと思ってますが。
Linkey

2017/06/15 15:57

EmProviderクラスの実装画像を差し替えました。見にくい場合はご連絡ください
Linkey

2017/06/23 23:55 編集

エラーの原因を確認してみたところEmProviderクラスのif(emf.isOpen() || emf != null) {...}の部分でNullPointerExceptionが発生していることを確認しました。このif文をさらに分解してみたところemf.isOpen() が原因でした。emfの設定でpersistence.xmlから設定取得がどうもうまくいっていないです。persistene.xmlは次のパスに配置しています。 「/java-restaurant/src/main/resources/META-INF/persistence.xml」
Linkey

2017/06/25 08:18 編集

申し訳ありません。ページが見づらくなったため一旦、新しく質問スレッドを立てます。
guest

回答8

0

自己解決

解決していませんが、質問ページが見づらくなってしまったため、一度新しく質問スレッドを作り直します。

投稿2017/06/25 08:20

Linkey

総合スコア77

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

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

0

昔に少し勉強がてらSpringMVC+Maven+Hibernateでほぼ空の簡単なプロジェクト作成したことありますが
ソースを見て気になったのは、DIしてるクラス変数を持つPreUserDAOをRegistrationBusinessLogicでnewしてるとこですかねぇ。DIってコンテナ起動時に行われてるような説明をどこかで見た気がしたのでnewしたインスタンスではDIの意味がないというかできないように思えるんですが間違ってたらすいません。

自分の場合は、DBに問い合わせる処理を書いたクラスをコントローラークラスでDIして使ってます。
スキャン対象のパッケージを記載した設定ファイルとそこら辺を見直してはどうでしょうか。

投稿2017/06/08 16:16

4qh9gwgrfr

総合スコア15

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

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

Linkey

2017/06/10 09:05

そうなんですね。SpringMVCの使い方がよくわからない状態でJPAとHibernateを使ってWebアプリケーションを開発しています。新たにxmlファイルを作って読み込ませてみたら問題なくDB接続と検索結果取得までできるかもしれないですね。
guest

0

現在の私のソースを載せておきます。
コンパイルエラーが出ていたところは一時的にコメントアウトしています。
springMVCなので、RegistrationControllerのinvokeメソッドを
動かすためには
http://localhost:8080/registration/a
というアドレスにアクセスする必要があります。
今のところはfindAllPreUserIdメソッドまでは行きますが、
EntityManagerの中身がnullなのでヌルポインターで止まっているような感じです。

PreUserDAO.java

java

1import java.io.Closeable; 2import java.io.IOException; 3import java.util.List; 4 5import javax.inject.Inject; 6import javax.persistence.EntityManager; 7import javax.persistence.EntityTransaction; 8import javax.persistence.Persistence; 9 10import com.example.registration.entity.PreUserEntity; 11 12 13/** 14 * 仮ユーザーテーブルにアクセスする 15 * 16 * @author user 17 * 18 */ 19public class PreUserDAO implements Closeable { 20 21 //final static String COMPLETED = "Comleted"; 22 23 //@Inject 24 private EntityManager em; 25 EntityTransaction et = null; 26 27 public PreUserDAO() { 28 System.out.println("entityManagerの設定"); 29 try{ 30 em = Persistence.createEntityManagerFactory("restaurant").createEntityManager(); 31 }catch(Exception e){ 32 System.out.println(e); 33 //e.printStackTrace(); 34 } 35 } 36 37 /** 38 * 仮ユーザーテーブルにレコードを挿入します 39 * 40 * @param preCostomerId 41 */ 42// @Override 43// public void insert(String preCostomerId, String processName) { 44// //TODO 未実装 45// } 46 47 48 //仮ユーザIDを検索して取得します 49 public void findAllPreUserId() { 50 System.out.println("検索を始めます"); 51 List<PreUserEntity> entity = em.createQuery("select new registration.entity.PreUserEntity(p.preCustomerId) " 52 + "from PreUserEntity p ", PreUserEntity.class).getResultList(); 53 54 if (entity.size() != 0) { 55 System.out.println("検索成功"); 56 } else { 57 System.out.println("検索失敗"); 58 } 59 em.close(); 60 } 61 62 @Override 63 public void close() throws IOException { 64 if (em != null) { 65 em.close(); 66 } 67 } 68}

RegistrationBusinessLogic.java

java

1import java.io.IOException; 2import com.example.registration.dao.PreUserDAO; 3 4 5 6public class RegistrationBusinessLogic { 7 PreUserDAO dao = null; 8 public void gettingPreUserIdFromDatabase() throws IOException { 9 try { 10 dao = new PreUserDAO(); 11 System.out.println("これからDAOクラスの検索メソッドを呼び出します"); 12 dao.findAllPreUserId(); 13 } finally { 14 dao.close(); 15 } 16 } 17}

RegistrationController.java

java

1import org.springframework.stereotype.Controller; 2import org.springframework.web.bind.annotation.RequestMapping; 3import org.springframework.web.bind.annotation.RequestMethod; 4 5 6 7import com.example.registration.business_logic.RegistrationBusinessLogic; 8 9 10@Controller 11public class RegistrationController { 12 //static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); 13 private RegistrationBusinessLogic logic = null; 14 15 public RegistrationController(){ 16 17 } 18 @RequestMapping(value = "/a", method = RequestMethod.GET) 19 public void invoke(String process_code){ 20 21 try { 22 //DAOクラスを呼び出す 23 //まずは仮会員IDを発番させる 24 logic = new RegistrationBusinessLogic(); 25 logic.gettingPreUserIdFromDatabase(); 26 27 } catch (Exception e) { 28 //TODO 未実装 29 } 30 } 31 32}

EntityManagerにInjectするには@PersistenceContextアノテーションを使うのではないかと思っていますが。

投稿2017/06/07 14:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/06/10 08:28 編集

回答ありがとうございます。共有していただいたソースコードを参考に以下の手順を実施しました。 ①pom.xmlに以下を追加する <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.8.RELEASE</version> </dependency> Spring MVCについては使い方を理解できていなくて愚問かもしれませんが @RequestMapping(value = "/a", method = RequestMethod.GET)の記述についてですがサーブレットが必要ないということでしょうか?一応サーブレットクラスも実装しており、調べてみたところSpring MVCでDBへの接続をするにはbean定義ファイルやSpringの設定ファイルが必要と記載があり大変そうなのですが、dwarfさんはSpringの設定ファイルやbean定義ファイルを作成しているのでしょうか? Spring設定参考サイト:(http://qiita.com/azun/items/5eff99fc1dcc6fdebc19) (http://qiita.com/siguremon/items/84c831391a6204079fd2) 作成したサーブレット: package registration.servlet; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import registration.controller.RegistrationController; import util.exception.UnexpectedProcessingException; import util.servlet.ServletResource; import util.util.OutputLogger; /** * サーブレットがコントローラーの役割を行うが ここでは受け渡しのみを実施する。 コントローラーの役割はビジネスロジックのクラスが担当する * サーブレットの役割と「モデル」と「ビュー」を制御つまり橋渡しの役 */ public class RegistrationServlet extends HttpServlet implements ServletResource{ private static final long serialVersionUID = 1L; //static org.apache.logging.log4j.Logger logger = LogManager.getLogger(Logger.class.getName()); private final static String COMMON_URL = "CommonUrl"; private final static String PROPERTY_FILE = "url.properties"; private final static Properties prop = new Properties(); private final static String API_NAME = "RegistrationServlet"; // 初期化処理を行います public void init() throws ServletException{ InputStream inStream = null; OutputLogger Logger = new OutputLogger(); StackTraceElement throwableStackTraceElement = null; String outputInfoLogLine = null; try { throwableStackTraceElement = new Throwable().getStackTrace()[0]; outputInfoLogLine = Logger.generateOutputInfoLogInfo(throwableStackTraceElement, 2); //logger.info("[プロパティファイル読込開始] ({})", outputInfoLogLine); throwableStackTraceElement = null; inStream = RegistrationServlet.class.getClassLoader().getResourceAsStream(PROPERTY_FILE); prop.load(inStream); } catch (IOException e) { Logger.generateOutputWarnLogInfo(API_NAME, e); gotoErrorPage("プロパティ読込エラー"); } catch (NullPointerException e) { //TODO ログにipアドレスを出力するかどうか検討中 Logger.generateOutputWarnLogInfo(API_NAME, e); gotoErrorPage("プロパティファイル未存在"); } finally { try { if (inStream != null) { inStream.close(); } throwableStackTraceElement = new Throwable().getStackTrace()[0]; outputInfoLogLine = Logger.generateOutputInfoLogInfo(throwableStackTraceElement, 2); } catch (IOException e) { Logger.generateOutputWarnLogInfo(API_NAME, e); } } } /** * GETはボタンやリンクを押したように時に何も情報がないもののリクエスト POSTは入力フォームといったリクエストする情報が存在するもの * なのでボタンやリンクを押した場合はGETメソッドとなる(クエストリングのリクエストも含む) * 会員登録ボタンを押しただけGETで受け取り、以降の利用規約同意画面や会員情報入力はPOSTが担当する */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //初回の処理(会員登録ボタン〜利用規約同意画面は特にJSONデータは必要なし) // パラメータを取得する(DecidedResistration) String process_code = request.getParameter("process_name"); // コントローラを呼び出す RegistrationController rc = new RegistrationController(); rc.invoke(process_code); // 利用規約同意画面を表示する // String getRequestUrl = prop.getProperty(process_code); // 利用規約同意画面を表示する(JSON形式で必要なデータを送る) // sarver-restaurantに送りつける // buildUrl = REQUEST_URL + getRequestUrl; // response.sendRedirect(buildUrl); } /** * 基底クラス(ビジネスロジック例外)意外のシステムエラーをキャッチします。 * DB接続失敗やユーザーの入力ミス等はビジネスロジック側で例外を処理します。 ログも基底クラスで出力するように設計すること * ここでチェックする例外はプロパティファイルの値取得失敗だけ 利用規約同意と会員入力フォームのリクエストを受け付ける */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //JSONを使ってリクエストのやりとりを行う } @Override public void gotoErrorPage(String errorMessage) { throw new UnexpectedProcessingException(errorMessage); } }
退会済みユーザー

退会済みユーザー

2017/06/11 12:09 編集

すみません。私個人に質問されていたのに今気づきました。 SpringMVCはSTSという開発プラグインがあるので ウィザードに従っていけばある程度作れます。 bean定義ファイルはapplication-config.xmlやapplicationContext.xmlという名前で探せば出てきますが、DBへの接続設定(大まかにはpersistence.xmlと同じ内容)です。 MVCフレームワークはservletを意識せずに作れるように設計されているので、サーブレット云々は一旦横に置かれた方がよいかと思います。 (RegistrationControllerをどう発火させてるのか疑問でしたがようやくわかりました)
Linkey

2017/06/11 14:17 編集

ご回答ありがとうございます。ぜひ参考にしたいと思っておりますが、一旦は現状の状態(Spring MVCを使わず)で検索処理を完成させようと思っています。とあるサイトでEntityManagerの設定についての参考になるソースコードがあったので設定してみたところEntityManagerで止まらずにエラーログを出したままロジッククラスまで戻ることができました。(close処理にてNullPointerExceptionが発生)検索処理が一通り完成したら別途mavenプロジェクトを作成してそちらで同じ内容のSpring MVC使用バージョンとしてDB接続と検索ができるプログラムを作成しようと考えています。
guest

0

ご自分で調査して試行していただくのはよいのですが、
何をどう変えたかがわからないとこちらとしても対処のしようがないです。

私は環境構築するのにここの連載を使っています。
デフォルトのpom.xmlにこの部分の依存性を追加するだけです。
Spring Frameworkを使ってみる ~データベースにアクセスする①~

一旦pom.xmlを切り戻してみるのがよいかもしれません。

投稿2017/06/06 13:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/06/07 14:19 編集

コメントありがとうございます。一旦、pom.xmlの設定を見直すことにしました。共有していただいたページ( http://tech.pjin.jp/blog/2016/05/31/springframework7/)より pom.xmlに「<hibernate.version>4.3.10.Final</hibernate.version>」と 以下の内容を追加しました。 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.8.1.RELEASE</version> </dependency> またMacのターミナルからMySQLを起動した状態で動かしたところ「現在のエラー状態」で出力されたようなエラーが表示されなくなりました。(EntityManagerの設定がうまくいったように見えます) 「entityManagerの設定」以降のメッセージ(検索を始めます)と検索成功or検索失敗は出力されていないので今の問題としてはfindAllPreUserIdメソッドがうまく呼び出せていないところです。(そもそもの問題の原点に戻ったという感じです。)
guest

0

ある程度環境を作って検証しました。

情報: このコンテキストの再ロードが完了しました entityManagerの設定 WARN : org.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. WARN : org.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. WARN : org.hibernate.ejb.HibernatePersistence - HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. WARN : org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in connection pool (not for production use!) javax.persistence.PersistenceException: Unable to build entity manager factory これからDAOクラスの検索メソッドを呼び出します 検索を始めます

スタックトレースを追うとDBに接続しに行っているのが確認できました。

xml

1<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

このページの回答に従ってproviderを上書きしただけです。

あと環境を作るにあたって気になった点ですが、
RegistrationControllerに@Controllerアノテーションと@RequestMappingが
なかった点でしょうか。
springMVCではないのでしょうか?

投稿2017/06/03 16:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/06/04 02:07

コメントありがとうございます。質問についてですが、Hibernateは勉強中で、springMVCの使い方がよく分かっておりません。サイトに載っているソースコードや設定方法を元に学習目的でmavenプロジェクトを立ててアプリケーションを開発したため@Controllerアノテーション等は使っていません。 またdwarfさんの回答を参考にpersistence.xmlを一旦、削除して再度作成してみたところ「No Persistence provider for EntityManager named restaurant」というエラーはなくなったのですが代わりに「SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".」というエラーが発生して「検索を始めます」がコンソールに出力されなくなりました。(デグった?)。解決方法は調査中です。
Linkey

2017/06/04 14:46 編集

現状の問題としてはUnable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]というエラーが発生しています。pom.xmlのhibernate-coreのあたりのバージョンを少し触ったところ、DB接続すらできない状態となりました。 解決方法は調査中です。
guest

0

persistence.xml

xml

1<persistence-unit name="restaurant"> 23</persistence-unit>

までの項目が2つ記述されていることが原因ということはないでしょうか。
他の例を調べてみても同じ名前で設定を書いているところはなかったので...。
http://d.hatena.ne.jp/m-prog/20120404/1333473319

persistence.xmlはMETA-INFの直下でしょうか?
他に原因として挙げられているのは依存関係(pom.xml)で
EclipseLink
hibernate-entitymanager.jar
が足りないとかですね。

同じ環境を作れないのであくまで調べた結果からの推測になってしまいますが。

投稿2017/05/26 02:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/05/30 14:51

コメントありがとうございます。依存関係の設定や<persistence-unit name="restaurant">も1つにしてみましたがエラーの解決ができませんでした。もう少し原因を調べてみます。
Linkey

2017/06/03 07:55 編集

問題の切り分けとして以下のようにソースコードを修正してデバッグ実行してみたところ、createEntityManagerFactoryで「No Persistence provider for EntityManager named restaurant」が発生していることがわかりました。やはりpersitence.xmlの設定がいけないのでしょうか? 修正内容: em = Persistence.createEntityManagerFactory("restaurant").createEntityManager(); ↓ emf = Persistence.createEntityManagerFactory("restaurant"); em = emf.createEntityManager();
退会済みユーザー

退会済みユーザー

2017/06/03 07:54

一度記載されているpersitence.xmlを最新の内容にしていただけますでしょうか。 そこから何かヒントが得られるとよいのですが....。
Linkey

2017/06/03 07:59

最新の内容に更新いたしました。
退会済みユーザー

退会済みユーザー

2017/06/03 08:06

「No Persistence provider for EntityManager named restaurant…」以下のエラーログを詳細に記載していただけると助かります。 一説にはpersitence.xmlの絶対パスにスペースが入ってたりするとダメだとか…。
Linkey

2017/06/03 14:39

エラーの詳細をテキストファイルに貼り付けたものを追加しました。
guest

0

persistence.xmlのproviderを

xml

1<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

に統一する形ではダメでしょうか?
根拠

投稿2017/05/21 11:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/05/25 14:39

コメントありがとうございます。ご指摘いただいた通りに統一してみたところ "検索を始めます"まではコンソールに出力できたのですが、やはりcreateQueryのところで「No Persistence provider for EntityManager named restaurant」が発生してしまいます。解決方法は調査中です。Hibernateってやはり難しいですね。
guest

0

コンストラクタPreUserDAOで止まってしまっているように見えます。

java

1em = Persistence.createEntityManagerFactory("restaurant").createEntityManager();

ここで何らかのエラーが発生して、catch句に引っかからずに
エラーログが出ないのでは…?
まずcatch句でエラーログを吐かせるのが解決への近道かと思います。

※補足
EntityManagerのInject方法
EntityManagerをDIする方法もあります。

投稿2017/05/17 02:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Linkey

2017/05/20 16:16

アドバイスありがとうございます。try-catch句で囲んで実行したところ「No Persistence provider for EntityManager named restaurant」というエラーが出力されました。解決方法を調べて、調べた対処方法をやりましたがエラーの解決ができません。persistence.xmlにunit-nameを指定したにもかかわらず何故かこのエラーが発生してしまいます。お詳しい方がいましたらコメントをお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問