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

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

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

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

Q&A

解決済

1回答

2588閲覧

Webアプリケーション 検索メソッドについて

Yoshi.E

総合スコア7

JSF

JSF (JavaServer Faces)とは、JavaベースのWebアプリケーションフレームワークの一つです。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

NetBeans

NetBeansは Java、HTML5、PHP、C/C++のアプリケーションのフレームワーク、もしくは統合開発環境(NetBeans IDE)の両方を指します

0グッド

0クリップ

投稿2016/05/27 02:18

###前提・実現したいこと
NetBeans jsf JAVADB を用いて書籍管理のwebアプリを作成しています。
現在は検索フォームにISBN番号(主キー)を入れるとそれに該当するデータが帰ってくるというものになっております。
しかし、これではあまりにも実用性に欠けるので、検索フォームに文字を入力しそれに該当するタイトルの書籍を表示させたいです。
(例:検索フォームにjaと入力→結果フォームに書籍名にjaを含むデータリスト一覧が返される)

主キーによる検索はEntityManagerのfindメソッドを用いて行えるようになったのですが、前述した機能のメソッドがわかりません。

教えていただけると幸いです。

###該当のソースコード
JAVA

package beans;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class Worker02 {

@PersistenceContext//エンティティ・マネージャーをインジェクトする private EntityManager em;//インジェクトしたデータをemにセット public void register(BookEntity02 be) { em.persist(be);//データベースへの登録メソッド } public void update(BookEntity02 be) { em.merge(be); } public BookEntity02 find(String key) { return em.find(BookEntity02.class, key); } public void delete(BookEntity02 be) { em.remove(em.merge(be)); } public List<BookEntity02> getData() { return em.createQuery("SELECT r FROM BookEntity02 r").getResultList(); }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

JPAを利用していると仮定して。
下記ページにあるようにNamedQueryを利用することで実現できるかと思います。

タイトル検索用メソッドを以下のように定義してみてはいかがでしょうか。

Java

1// Worker02のタイトル検索用メソッド(前方一致) 2public List findByTitle(String title) { 3 return em.createNamedQuery(BookEntity02.SELECT_BY_TITLE) 4 .setParameter("title", title + "%") 5 .getResultList(); 6}

BookEntity02には上記で利用しているNamedQueryを定義しておきます。

Java

1@NamedQueries({ 2 @NamedQuery(name=BookEntity02.SELECT_BY_TITLE, 3 query="select b from [テーブル名] b where b.title like :title")}) 4public class BookEntity02 { 5 6 // NamedQuery定義: タイトルでの検索 7 public static final String SELECT_BY_TITLE = "Book.selectBooksByTitle"; 891011

追記&修正です。

すみません、参考としたページの内容を転記&修正したソースとしたので、不足がありましたね。
NamedQueryは、Query(問合せ≒SQL)に名前をつけておくものとなります。
name=で指定するものはこの名前であり、文字列で指定します。

これはWorker02からも利用するので、public staticとして定義しておくとタイプミスがなくてよい、という記述の仕方です。

投稿2016/05/27 03:01

編集2016/05/27 05:10
takyafumin

総合スコア2335

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

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

Yoshi.E

2016/05/27 04:37

回答ありがとございます! return em.createNamedQuery(Book02.SELECT_BY_TITLE) のBook02というものは何を表すものなのでしょうか? 現在作成しているものは エンティティ→BookEntity02 EJB→Worker02 バッキングBean→BackingBook02 です。 かさねがさね申し訳ありありませんがどうぞよろしくお願いいたします。
Yoshi.E

2016/05/27 04:57 編集

Book02の部分をBookEntity02にし、 Worker02とBookEntity02にtakyafumin様が提示してくださったコードを実装しますと、 SELECT_BY_TITLEに赤波線が入り、シンボルを見つけられませんと出ます。 不勉強で申し訳ないのですが理由がわからないです。 できることならtakyafumin様にプロジェクトを送って解析してもらいたいです。
takyafumin

2016/05/27 06:18

上記への対応を回答に追記しました。
Yoshi.E

2016/05/27 06:34

わああああ!今できました!!!!!!! 感動です。思わずガッツポーズをしてしまいました!! まだまだ初心者ですが、takyafumin様のような人に教えることのできるプログラマーを目指し頑張ります。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問