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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

解決済

Spring Boot2 DBのエラーに関して

encho
encho

総合スコア2

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

1回答

0評価

0クリップ

13閲覧

投稿2020/02/09 10:28

Spring徹底入門の書籍を用いてChaprer14のチュートリアルに取り組んでいます。
エンティティを作成後にMYSQLを用いてデータベースを作成し、springを実行したところ下のようなエラーが発生しました。room_idの型に対するエラーだとは見当がつくのですがどのように対処するべきかがわかりません。ご教示いただけると幸いです。

spring Boot 2.2.4
mysql 8.0.18を使用しています。

##発生するエラー

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [room_id] in table [meeting_room]; found [bigint (Types#BIGINT)], but expecting [integer (Types#INTEGER)] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) ~[spring-boot-2.2.4.RELEASE.jar:2.2.4.RELEASE] at mrs.MrsApplication.main(MrsApplication.java:10) ~[classes/:na]

MeetingRoom

package mrs.domain.model; import java.io.Serializable; import javax.persistence.*; @Entity @Table public class MeetingRoom implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer roomId; private String roomName; public Integer getRoomId() { return roomId; } public void setRoomId(Integer roomId) { this.roomId = roomId; } public String getRoomName() { return roomName; } public void setRoomName(String roomName) { this.roomName = roomName; } }

ReservableRoom

package mrs.domain.model; import java.io.Serializable; import javax.persistence.*; @Entity public class ReservableRoom implements Serializable { @EmbeddedId private ReservableRoomId reservableRoomId; @ManyToOne @JoinColumn(name="room_id", insertable=false,updatable = false) @MapsId("roomId") private MeetingRoom meetingRoom; public ReservableRoom(ReservableRoomId reservableRoomId) { this.reservableRoomId = reservableRoomId; } public ReservableRoom() {} public ReservableRoomId getReservableRoomId() { return reservableRoomId; } public void setReservableRoomId(ReservableRoomId reservableRoomId) { this.reservableRoomId = reservableRoomId; } public MeetingRoom getMeetingRoom() { return meetingRoom; } public void setMeetingRoom(MeetingRoom meetingRoom) { this.meetingRoom = meetingRoom; } }

ReservableRoomI

package mrs.domain.model; import java.io.Serializable; import java.time.LocalDate; import javax.persistence.*; @Embeddable public class ReservableRoomId implements Serializable { private Integer roomId; private LocalDate reservedDate; public ReservableRoomId(Integer roomId,LocalDate reservedDate) { this.roomId = roomId; this.reservedDate = reservedDate; } public ReservableRoomId() {} @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result +((reservedDate == null) ? 0:reservedDate.hashCode()); result = prime * result +((roomId == null) ? 0: roomId.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this == obj) return true; if(obj == null) return false; if(getClass() != obj.getClass()) return false; ReservableRoomId other = (ReservableRoomId)obj; if(reservedDate == null) { if(other.reservedDate != null) return false; } else if(!reservedDate.equals(other.reservedDate)) return false; if(roomId == null) { if(other.roomId != null) return false; } else if(!roomId.equals(other.roomId)) return false; return true; } }

Reservation

package mrs.domain.model; import java.io.Serializable; import java.time.*; import javax.persistence.*; @Entity public class Reservation implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer reservationId; private LocalTime startTime; private LocalTime endTime; @ManyToOne @JoinColumns({ @JoinColumn(name="reserved_date"), @JoinColumn(name="room_id") }) private ReservableRoom reservableRoom; @ManyToOne @JoinColumn(name="user_id") private User user; public Integer getReservationId() { return reservationId; } public void setReservationId(Integer reservationId) { this.reservationId = reservationId; } public LocalTime getStartTime() { return startTime; } public void setStartTime(LocalTime startTime) { this.startTime = startTime; } public LocalTime getEndTime() { return endTime; } public void setEndTime(LocalTime endTime) { this.endTime = endTime; } public ReservableRoom getReservableRoom() { return reservableRoom; } public void setReservableRoom(ReservableRoom reservableRoom) { this.reservableRoom = reservableRoom; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }

application

spring.jpa.database=MYSQL spring.datasource.url=jdbc:mysql://localhost:3306/mrs spring.datasource.username=root spring.datasource.password=root spring.jpa.hibernate.ddl-auto=validate spring.jpa.properties.hibernate.format_sql=true spring.datasource.sql-script-encoding=Utf-8 spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.initialization-mode=always spring.jpa.open-in-view=true

schema.sql

sql

DROP TABLE IF EXISTS meeting_room CASCADE ; DROP TABLE IF EXISTS reservable_room CASCADE ; DROP TABLE IF EXISTS reservation CASCADE ; DROP TABLE IF EXISTS usr CASCADE ; CREATE TABLE IF NOT EXISTS meeting_room ( room_id SERIAL NOT NULL, room_name VARCHAR(255) NOT NULL, PRIMARY KEY (room_id) ); CREATE TABLE IF NOT EXISTS reservable_room ( reserved_date DATE NOT NULL, room_id INT(4) NOT NULL, PRIMARY KEY (reserved_date, room_id) ); CREATE TABLE IF NOT EXISTS reservation ( reservation_id SERIAL NOT NULL, end_time TIME NOT NULL, start_time TIME NOT NULL, reserved_date DATE NOT NULL, room_id INT(4) NOT NULL, user_id VARCHAR(255) NOT NULL, PRIMARY KEY (reservation_id) ); CREATE TABLE IF NOT EXISTS usr ( user_id VARCHAR(255) NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, role_name VARCHAR(255) NOT NULL, PRIMARY KEY (user_id) );

イメージ説明

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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