teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2020/07/24 06:08

投稿

rubytomato
rubytomato

スコア1752

answer CHANGED
@@ -52,4 +52,25 @@
52
52
 
53
53
  ```
54
54
  spring.jpa.database = POSTGRESQL
55
+ ```
56
+
57
+ **追記(2020/07/24)**
58
+
59
+ ```
60
+ org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [reserved_date] in table [reservable_room]; found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]
61
+ ```
62
+
63
+ このエラーは`ReservableRoomId`クラスの`reservedDate`フィールドが`Date`型の場合に表示されました。
64
+ `ReservableRoomId`クラスのコードが下記のようになっている場合
65
+
66
+ ```java
67
+ @Column
68
+ private Date reservedDate;
69
+ ```
70
+
71
+ フィールドの型を`LocalDate`に変え(関連する箇所も)て確認してください。
72
+
73
+ ```java
74
+ @Column
75
+ private LocalDate reservedDate;
55
76
  ```

1

修正

2020/07/24 06:08

投稿

rubytomato
rubytomato

スコア1752

answer CHANGED
@@ -5,22 +5,34 @@
5
5
  > JPAベースのアプリでは、Hibernateにスキーマを作成させるか、schema.sqlを使用させるかを選択できますが、両方を行うことはできません。 schema.sqlを使用する場合は、必ずspring.jpa.hibernate.ddl-autoを無効にしてください。
6
6
 
7
7
  上記に引用した通り、HiberanteとDatasourceを併用したデータベースの初期化はできません。
8
- 現在の設定では
9
8
 
10
- ```
9
+ **修正**
11
- spring.jpa.hibernate.ddl-auto=validate
12
- ```
13
10
 
14
- としてる(つまりHibernateを利用)schema.sqlは読み込れない状態です。
11
+ コメントが付いたので確認したところ私の回答に誤りがありしたの訂正します。
12
+ 下記内容を取り消し、改めて回答させて頂きます。
15
13
 
16
- schema.sqlを読み込んテーブルを作成したい場合
14
+ ~~現在の設定では~~
17
15
 
16
+ ~~spring.jpa.hibernate.ddl-auto=validate~~
18
17
 
18
+ ~~としている(つまりHibernateを利用)ため、schema.sqlは読み込まれない状態です。~~
19
+
20
+ ~~schema.sqlを読み込んでテーブルを作成したい場合は~~
21
+
22
+ ~~spring.jpa.hibernate.ddl-auto = none~~
23
+
24
+ ~~としてHibernateを使用せず、且つ下記を追加します。~~
25
+
26
+ **再回答**
27
+
28
+ 下記の設定が有効だとschema.sqlが読み込まれないと回答しましたが、この設定があっても読み込みが行われ、`validate`の場合はエンティティクラスとデータベースとの整合性のチェックが行われます。
29
+ なお、他の設定値の`create`や`create-drop`でもschema.sqlの読み込みが行われますが整合性が担保できなくなる可能性が高いので併用は避けてください。
30
+
19
31
  ```
20
- spring.jpa.hibernate.ddl-auto = none
32
+ spring.jpa.hibernate.ddl-auto = validate
21
33
  ```
22
34
 
23
- としてHibernateを使用せず、且つ下記を追加し
35
+ 下記の行は訂正前と同様に必要で、この行がないとschema.sqlの読み込みは行われせん
24
36
 
25
37
  ```
26
38
  spring.datasource.initialization-mode = always
@@ -34,7 +46,6 @@
34
46
 
35
47
  デフォルト値は`embedded`なので、埋め込みDB(H2など)の場合のみ機能します。なのでPostgreSQLの場合は`always`として常に有効になるようにします。
36
48
 
37
-
38
49
  **補足**
39
50
 
40
51
  `spring.jpa.database`を下記のように設定していますが、このプロパティはSpring Bootによって自動検出されるので、明示する理由がなければ省略しておいた方がいいと思います。