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

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

ただいまの
回答率

90.84%

  • Spring Boot

    392questions

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

springbootで、schema.sqlファイル通りテーブルを作成してくれない。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 218

springboot(sts)を使用してプログラミングをしています。
そこで、起動時に自動でテーブルを作成できるようにdata.sqlファイルを用意して作成しているのですが、data.sqlファイルで指定しているテーブル定義と実際に作成されるテーブル定義が異なって作成されてしまいます。なぜでしょうか?また解決方法をお教えください。

  • ディレクトリ構成
    イメージ説明
  • コード詳細
    [Item.java]
package com.example.demo.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Item implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private byte[] img;
    private String title;
    private String description;
    private long price;
}


[application.properties]

server.port=9003
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testAPI?characterEncoding=UTF8&useSSL=false
spring.datasource.username=root
spring.datasource.password=7777
spring.jpa.hibernate.ddl-auto=update


[data.sql]

create table if not exists items(
    id int auto_increment primary key,
    img blob,
    title varchar(100),
    price bigint,
    description varchar(500));
  • 実際のテーブル定義
    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | id          | int(11)      | NO   | PRI | NULL    | auto_increment |
    | description | varchar(255) | YES  |     | NULL    |                |
    | img         | tinyblob     | YES  |     | NULL    |                |
    | price       | bigint(20)   | NO   |     | NULL    |                |
    | title       | varchar(255) | YES  |     | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+
  • 実現したいテーブル定義
    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | id          | int(11)      | NO   | PRI | NULL    | auto_increment |
    | img         | blob         | YES  |     | NULL    |                |
    | title       | varchar(100) | YES  |     | NULL    |                |
    | price       | bigint(20)   | YES  |     | NULL    |                |
    | description | varchar(500) | YES  |     | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+

よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2018/05/04 01:26

    create,create-dorop,update とかなってるのを none にするだけのやつか・・・

    キャンセル

回答 1

checkベストアンサー

+2

- spring.jpa.hibernate.ddl-auto=update
+ spring.jpa.hibernate.ddl-auto=none

以上で hibanate の自動生成で壊されなくなると思うが

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/05/04 12:50

    回答ありがとうございます。
    すでにあるテーブルの定義が変わってしまうのではなく、まだ一つもテーブルがない状態で新しくテーブルを作成する場合に、data.sqlの定義通りに作成されず、上記の「・実際のテーブル定義」のようにテーブルが定義されて作成されてしまいます。

    キャンセル

  • 2018/05/04 12:52

    いや hibernate が壊れた(アルファベット順)形式で先に作るので

    create table if not exists で SQLファイル側では作成されないのですよ

    キャンセル

  • 2018/05/04 13:14

    早々に回答ありがとうございます。
    仰る通りに記述しましたところ、テーブル自体が作成されなくなってしまいました。

    キャンセル

  • 2018/05/04 17:33

    https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-initialize-a-database-using-spring-jdbc

    キャンセル

  • 2018/05/04 17:36

    spring.datasource.initialization-mode の設定を上記リンク先の指示のとおりにに指定してください

    キャンセル

  • 2018/05/05 01:45

    コメント通り設定を行ったらできました!
    本当に本当に、ありがとうございました!
    とても感謝しています。

    キャンセル

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

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

関連した質問

  • 解決済

    【Spring】【JPA】左外部結合がうまくいきません

    結合でデータを取ろうとしているのですが、以下のような例外が起こります この例外を回避する方法を知りたいです。 <例外が状況> T_estimateにデータがある T_estima

  • 解決済

    spring jpaの仕様なんとかならないかな

    ユーザのエンティティクラスを作り、ユーザのレポジトリインタフェースをつくりました。あとはレポジトリインタフェースをインジェクトしてエンティティクラスをもとにユーザテーブルへの保存、

  • 解決済

    Spring起動時エラー

    java 前提・実現したいこと springを実行中に以下のエラーメッセージが発生しました。 src/main/resourcesの配下にsqlファイルを置いているのですが実

  • 解決済

    SpringSecurityのログイン画面について

    いつもお世話になっております。 SpringSecurityのログイン画面を作成しております。 内容としましては、MysqlのNewaccountテーブルに登録しているユーザを 検

  • 受付中

    Springでのパラメータ値の取得

    htmlのフォームに入力した値をcontroller経由でmodelで取得する方法を教えて下さい。 @RequestMapping(value="/hoge2/←フォームのある

  • 解決済

    Spring-BootのFormバリデーション@Patternのリソースについて

     やりたいこと 後述のようなコントローラ&フォームのプログラムにおいて、 @Patternアノテーションで日付文字列の形式チェックを行い、 検証エラー時はメッセージリソースからメッ

  • 解決済

    シングルトンでDIされているメンバ変数が初期値となる。

    前提・実現したいこと DIの初期化処理で読みんだコンフィグファイルを保持したい。 発生している問題・エラーメッセージ なし 該当のソースコード ■サーブレットコンテキスト

  • 解決済

    (Spring Security)ログイン認証時のカラム名(username, password)を...

    お世話になります。 Spring BootとSpring Securityを使用して、ログイン認証を実装しています。 デフォルトでは、DBにusernameとpasswordの

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

  • Spring Boot

    392questions

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