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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2677閲覧

[SpringBoot]スキーマ名.テーブル名の記述方法でSelect文を実行したい

nekomodoki

総合スコア8

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

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

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

1クリップ

投稿2018/08/20 02:01

前提・実現したいこと

以下のようなSelect文をSpringBootで実行したいのですが、ObjectBrowserで実行できた
通りに書くとエラーが出てしまい、動いてくれません。

Select * From schem.table1
(schema=スキーマ名, table1=テーブル名)

どのように書けばスキーマ名.テーブル名を指定してSQL文を実行することが可能となるのでしょうか?(Select * From table1 は実行できます)

エンティティクラスに付与している@Tableにschemaはつけておりません。
できればSelect文のところでスキーマ指定をしたいと思っております。
どうか、ご存知の方がいらっしゃいましたらご教授お願いいたします。
また、質問内容に至らない点がございましたらお手数ですが、ご指摘お願いいたします。

ソース

@Override @SuppressWarnings("unchecked") public List<enti> getData() { StringBuilder sql = new StringBuilder(); sql.append("Select e From schema.enti e"); // ←実行したいSelect文 Query query = manager.createQuery(sql.toString()); return query.getResultList(); }

enti=エンティティクラス

エラーメッセージ

org.hibernate.hql.internal.ast.QuerySyntaxException: schema.enti is not mapped

補足情報(FW/ツールのバージョンなど)

STS : 3.9.4.RELEASE
SpringBoot : 1.5.10.RELEASE
java : 1.8

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

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

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

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

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

euledge

2018/08/20 02:18

native query使うのはどうでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/20 03:36

Query -> HQL / NativeQuery -> SQL
nekomodoki

2018/08/21 03:20

コメントありがとうございます。native queryについて調べてみたのですが、これを使用するとEntityは使用できなくなるのでしょうか?ご存知でしたらご教授お願いいたします。
nekomodoki

2018/08/21 03:27

コメントありがとうございます。そのあたりの理解が浅いので調べなおしてみます!
euledge

2018/08/21 05:17

createQuery -> createNativeQueryで良いと思いますよ
nekomodoki

2018/08/21 05:44

さっそく変更してみたのですが、表またはビューが存在しません。のエラーが出てしまいました。その後もエンティティクラス名のところをテーブル名に変えたりといろいろやってみたのですがうまくいきませんでした・・。せっかくアドバイスをいただいたのにすみません。
nekomodoki

2018/08/27 04:55 編集

お返事が遅くなってしまって大変申し訳ございません。 URLまでありがとうございます・・・!参考にさせていただきます!
guest

回答1

0

ベストアンサー

手元の環境で確認しましたが特に問題なくSELECTできるようです。

確認の環境

  • Windows7
  • Oracle 11g/XE
  • Java8
  • SpringBoot 1.5.14.RELEASE
  • com.oracle:ojdbc6:11.2.0.3

DDL

sql

1CREATE TABLE "SAMPLE"."TEST" ( 2 ID NUMBER(19,0) NOT NULL ENABLE, 3 NAME VARCHAR2(255) NOT NULL ENABLE, 4 PRIMARY KEY ("ID") 5);

エンティティクラス (Getter,Setterは省略します)

Java

1@Entity 2@Table(name = "test") 3public class TestModel { 4 @GeneratedValue(strategy = GenerationType.AUTO, generator = "native") 5 @GenericGenerator(name = "native", strategy = "native") 6 @Column(name = "id", unique = true, nullable = false) 7 @Id 8 Long id; 9 @Column(name = "name") 10 String name; 11}

サービスクラス

Java

1/** */ 2@Service 3public class TestService { 4 5 @Autowired private EntityManager manager; 6 7 public List<TestModel> getDataJPQL() { 8 StringBuilder sql = new StringBuilder(); 9 sql.append("SELECT e From TestModel e"); // ←実行したいJPQL文 10 return manager.createQuery(sql.toString(),TestModel.class).getResultList(); 11 } 12 13 public List<TestModel> getDataNativeQuery() { 14 StringBuilder sql = new StringBuilder(); 15 sql.append("select * from sample.test"); // ←実行したいSelect文 16 return manager.createNativeQuery(sql.toString(),TestModel.class).getResultList(); 17 } 18}

念のためご存知とは思いますがCreateQueryの場合はテーブル名にあたる部分はEntityクラス名、createNativeQueryの場合は実際のテーブル名を指定する必要があります。

以下のようにログの指定(logging部分)をすれば実際に発行するSQL文やパラメータを出力できますので誤りがないか確認してみるとよいと思います。

application.yml

yaml

1spring: 2 datasource: 3 platform: Oracle11g 4 driverClassName: oracle.jdbc.driver.OracleDriver 5 url: jdbc:oracle:thin:@127.0.0.1:1521/XE 6 username: [ユーザ名] 7 password: [パスワード] 8 jpa: 9 database-platform: org.hibernate.dialect.Oracle10gDialect 10logging: 11 level: 12 org.springframework: INFO 13 org.hibernate.SQL: TRACE 14 org.hibernate.type.descriptor.sql.BasicBinder: TRACE

投稿2018/08/22 02:17

編集2018/08/22 02:19
euledge

総合スコア2404

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

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

nekomodoki

2018/08/27 04:59

お返事が遅くなってしまい、大変申し訳ございません。 ご丁寧にありがとうございます。 この通りにやってみたところできました・・・!! エラーが出ていたところはこことは直接関係のないところだったようです。 お騒がせしてしまいすみません・・・。 この方法でやりたかったことが実現できそうです!本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問