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

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

ただいまの
回答率

90.03%

DB検索時にクエリエラーが発生する

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,046

Linkey

score 41

Hibernateを使ってWebアプリケーションを作成しています。DBを検索した時にクエリエラーが発生しました。検索ではpreCustomerIdという仮会員IDのみを取得したいです。エラーについて調べてみましたが有力な解決方法が見つかりませんでした。Hibernate JPAにお詳しい方がいましたらご回答をお願いいたします。

※質問の文字数制限の都合でエラーメッセージはキャプチャーとして掲載させていただきます。
イメージ説明

イメージ説明

イメージ説明

イメージ説明

package registration.dao;

import java.io.Closeable;
import java.io.IOException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.TypedQuery;

import registration.entity.PreUserEntity;
import util.dao.EmProvider;

/**
 * 仮ユーザーテーブルにアクセスする
 *
 * @author user
 *
 */
public class PreUserDAO implements Closeable {

    private final static String SQL_FIND_ALL_PRE_USER_ID = "PreUser.findAllPreCostomerId";

    private EntityManager em = null;
    EntityTransaction et = null;

    /**
     * 発番された仮会員IDがテーブルに存在するかどうかを確認する
     */
    public void findAllPreUserId() {

        EntityManager em = null;
        try {

            em = EmProvider.getInstance().getEntityManagerFactory().createEntityManager();

            if(em == null){
                System.out.println("emの設定に失敗");
            }

            TypedQuery<PreUserEntity> query = em.createNamedQuery(SQL_FIND_ALL_PRE_USER_ID, PreUserEntity.class);

            if(query == null){
                System.out.println("検索結果のマッピングに失敗");
            }

            List<PreUserEntity> entity = query.getResultList();

            if(entity.size() != 0){
                System.out.println("検索成功しました。");
            } else {
                System.out.println("検索結果に失敗しました。");
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        finally {
            if(em != null) {
                 em.close();
            }
            EmProvider.getInstance().closeEmf();
        }
    }

    @Override
    public void close() throws IOException {
        if (em != null) {
            em.close();
        }
    }
}
package registration.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;

/**
 * The persistent class for the pre_user database table.
 *
 */
@Entity
@Table(name = "pre_user")
@NamedQueries({
    @NamedQuery(name = "PreUser.find", query = "SELECT p FROM pre_user p"),
    @NamedQuery(name = "PreUser.findAllPreCostomerId", query = "SELECT NEW registration.entity.PreUserEntity (p.preCustomerId) FROM pre_user p")
})

public class PreUserEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="pre_customer_id")
    private String preCustomerId;

    @Column(name="process_name")
    private String processName;

    @Column(name="process_status")
    private String processStatus;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="register_time")
    private Date registerTime;

    @Column(name="register_user")
    private String registerUser;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="update_time")
    private Date updateTime;

    @Column(name="update_user")
    private String updateUser;

    public PreUserEntity() {
    }

    public PreUserEntity(String preCostomerId) {
        this.preCustomerId = preCostomerId;
    }

    public String getPreCustomerId() {
        return this.preCustomerId;
    }

    public void setPreCustomerId(String preCustomerId) {
        this.preCustomerId = preCustomerId;
    }

    public String getProcessName() {
        return this.processName;
    }

    public void setProcessName(String processName) {
        this.processName = processName;
    }

    public String getProcessStatus() {
        return this.processStatus;
    }

    public void setProcessStatus(String processStatus) {
        this.processStatus = processStatus;
    }

    public Date getRegisterTime() {
        return this.registerTime;
    }

    public void setRegisterTime(Date registerTime) {
        this.registerTime = registerTime;
    }

    public String getRegisterUser() {
        return this.registerUser;
    }

    public void setRegisterUser(String registerUser) {
        this.registerUser = registerUser;
    }

    public Date getUpdateTime() {
        return this.updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getUpdateUser() {
        return this.updateUser;
    }

    public void setUpdateUser(String updateUser) {
        this.updateUser = updateUser;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

queryのFROM句で指定しているテーブル名は、実テーブル名ではなく、クラスを指定します。

 @NamedQuery(name = "PreUser.find", query = "SELECT p FROM PreUser p"),
 @NamedQuery(name = "PreUser.findAllPreCostomerId", query = "SELECT NEW registration.entity.PreUserEntity (p.preCustomerId) FROM PreUser p")

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/13 00:20

    ありがとうございました。無事に解決できました。

    キャンセル

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

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる