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

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

ただいまの
回答率

87.37%

spring boot アプリ実行時「ORA-00942: 表またはビューが存在しません。」エラー

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,130
退会済みユーザー

退会済みユーザー

spring bootとjpaを利用して、ログイン画面を実装しています。
参考中の資料

実行時、下記のようなエラーが発生しています。
調べても解決方法がわからなかったため、質問させていただきます。

 エラーログ

文字数制限のため、各項目の上位のみ記載しています。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'webSecurityConfig': Injection of autowired dependencies failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:538) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
Caused by: java.sql.SQLSyntaxErrorException: ORA-00942: 表またはビューが存在しません。

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:12.2.0.1.0]
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054) ~[ojdbc8.jar:12.2.0.1.0]

Caused by: oracle.jdbc.OracleDatabaseException: ORA-00942: 表またはビューが存在しません。

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498) ~[ojdbc8.jar:12.2.0.1.0]
    ... 71 common frames omitted

application.properties

spring.datasource.url=jdbc:oracle:thin:@localhost:1521/studydatabase
spring.datasource.username=studyuser
spring.datasource.password=password
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

DB

  CREATE TABLE "STUDYUSER"."TODO_LIST_USER" 
   (    "ID" NUMBER NOT NULL ENABLE, 
    "NAME" VARCHAR2(20 BYTE), 
    "MAILADDRESS" VARCHAR2(20 BYTE), 
    "MAILADDRESSVERIFIED" NUMBER(*,0), 
    "PASSWORD" VARCHAR2(1000 BYTE), 
    "ENABLED" NUMBER(*,0), 
     CONSTRAINT "TODO_LIST_USER_PK" PRIMARY KEY ("ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

UserEntitiy.java

@Entity
@Table(name="TODO_LIST_USER")
@Data
public class UserEntity implements UserDetails {

    private static final long serialVersionUID = 1L;

    public enum Authority {ROLE_USER, ROLE_ADMIN}

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TODO_SEQ")
    @SequenceGenerator(sequenceName = "SEQ1",allocationSize = 1,name="TODO_SEQ")
    private Long id;

    @Column(name="NAME")
    private String userName;

    @Column(name="MAILADDRESS",nullable = false, unique = true)
    private String mailAddress;

    @Column(name="MAILADDRESSVERIFIED",nullable = false)
    private boolean mailAddressVerified;

    @Column(name="PASSWORD")
    private String password;

    @Column(nullable = false)
    private boolean enabled;

    @ElementCollection(fetch = FetchType.EAGER)
    @Enumerated(EnumType.STRING)
    @Column(nullable = false)
    private Set<Authority> authorities;

    protected UserEntity() {}

    (省略)
}

entitiyに「schema = "STUDYUSER"」を指定してみましたが、解決しませんでした。
application.propertiesに接続情報を記載しているので
テーブル指定だけでいいと思いましたが、設定が足りなかったでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+1

application.yml

spring:
  datasource:
    url: jdbc:oracle:thin:@//localhost:1521/MYORCL
    username: orauser
    password: orauser

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: validate
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
        globally_quoted_identifiers: true

create table

CREATE TABLE "ORAUSER"."users" (
    id          number            primary key,
    username    varchar2( 50)    not null,
    email       varchar2( 50)    not null,
    password    varchar2(255)    not null,
    created        TIMESTAMP        not null,
    updated        TIMESTAMP        not null,
    deleted        TIMESTAMP
);

User.java

package com.example.spring.oracle.entity;

import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Table;

import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters.LocalDateTimeConverter;

import lombok.Data;

@Data
@Table(name = "users", indexes = { //
        @Index(columnList = "USERNAME, DELETED", unique = true), //
        @Index(columnList = "USERNAME, DELETED", unique = true), //
}, schema = "ORAUSER")
@Entity
public class User {

    @Id
    @Column(name = "ID", nullable = false)
    Long id;

    @Column(name = "USERNAME", nullable = false)
    String username;

    @Column(name = "EMAIL", nullable = false)
    String email;

    @Column(name = "PASSWORD", nullable = false)
    String password;

    @Column(name = "CREATED", nullable = false)
    @Convert(converter = LocalDateTimeConverter.class)
    LocalDateTime created;

    @Column(name = "UPDATED", nullable = false)
    @Convert(converter = LocalDateTimeConverter.class)
    LocalDateTime updated;

    @Column(name = "DELETED", nullable = true)
    @Convert(converter = LocalDateTimeConverter.class)
    LocalDateTime deleted;

}

前提が間違えてた。。 なんか他に設定がありそう

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

0

できるか分かりませんが、下記はどうでしょうか。

@Table(name="STUDYUSER.TODO_LIST_USER")

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/04/25 19:22

    参考にしたURLがあまり適切ではなかったように思えます。
    軽くググったところで、こっちの方が向いていそう。
    https://intellectual-curiosity.tokyo/2019/04/30/spring-boot%E3%81%A7oracle-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

    キャンセル

  • 2020/04/25 19:39

    これで退会は、ちょっと。

    キャンセル

  • 2020/04/25 23:34

    とりま、動作確認がてら探してやってみたけど オラクルのスキーマ名をもった処理があまりサポートしてない感じ。

    スキーマ名も小文字にされるとか(まずここで引っかかる)
    引用符はアノテーションにいれてもよかったけど設定があったからそっちを利用できる

    キャンセル

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

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

関連した質問

同じタグがついた質問を見る