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

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

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

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

Java

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Spring Boot

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

Q&A

解決済

1回答

1617閲覧

【Spring Framework】【DB】【外部参照】entityManagerFactoryのエラー解決

kuro0607

総合スコア1

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

Java

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Spring Boot

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

0グッド

0クリップ

投稿2022/06/06 23:12

編集2022/06/07 13:59

はじめまして。エラーから抜け出せずに困っているSpringBoot初心者にご尽力いただけますと幸いです。

具体的にはOracle SQL DeveloperにてCategoryテーブル、Eclipse にてEntity / Repositoryを作成したのですが、外部参照が上手くいかないという状況です。
前提としてBookテーブル、Genreテーブルの紐づけは成功しています。
(HTMLにてジャンル名で検索結果を出力できます)

該当のテーブル

■ Book

COLUMN_NAMEDATA_TYPECOLUMN_ID
BOOK_IDNUMBER(5,0)1
BOOK_NAMEVARCHAR2(60 CHAR)2
...省略...
GENRE_IDNUMBER(2,0)6
CATEGORY_IDNUMBER(2,0)7
  • PRIMARY KEY("BOOK_ID")
  • "BOOK_NAME" IS NOT NULL
  • "GENRE_ID" IS NOT NULL
  • FOREIGN KEY ("GENRE_ID")
  • "CATEGORY_ID" IS NOT NULL
  • FOREIGN KEY ("CATEGORY_ID")

■ Genre

COLUMN_NAMEDATA_TYPECOLUMN_ID
GENRE_IDNUMBER(2,0)1
GENRE_NAMEVARCHAR2(30 CHAR)2
  • "GENRE_NAME" IS NOT NULL
  • PRIMARY KEY("GENRE_ID")

■ Category

COLUMN_NAMEDATA_TYPECOLUMN_ID
CATEGORY_IDNUMBER(2,0)1
CATEGORY_NAMEVARCHAR2(30 CHAR)2
  • "CATEGORY_NAME" IS NOT NULL
  • PRIMARY KEY("CATEGORY_ID")

該当のソースコード

■ Book :Entity1

Java

1package jp.co.sss.book.entity; 2 3import java.util.Date; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.GeneratedValue; 8import javax.persistence.GenerationType; 9import javax.persistence.Id; 10import javax.persistence.JoinColumn; 11import javax.persistence.ManyToOne; 12import javax.persistence.SequenceGenerator; 13import javax.persistence.Table; 14 15@Entity 16@Table(name = "book") 17public class Book { 18 19 @Id 20 private Integer bookId; 21 22 @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = 23 "seq_book_gen") 24 25 @SequenceGenerator(name = "seq_book_gen", sequenceName = "seq_book", 26 allocationSize = 1) 27 28 @Column 29 private String bookName; 30 31 @Column 32 private String author; 33 34 @Column 35 private Date publicationDate; 36 37 @Column 38 private Integer stock; 39 40 @ManyToOne 41 @JoinColumn(name="genre_id",referencedColumnName="genreId") 42 private Genre genre; 43 44 @ManyToOne 45 @JoinColumn(name="category_id",referencedColumnName="cateogryId") 46 private Category category; 47 48 public int getBookId() { 49 return bookId; 50 } 51 52 public void setBookId(Integer bookId) { 53 this.bookId = bookId; 54 } 55 56 public String getBookName() { 57 return bookName; 58 } 59 60 public void setBookName(String bookName) { 61 this.bookName = bookName; 62 } 63 64 public String getAuthor() { 65 return author; 66 } 67 68 public void setAuthor(String author) { 69 this.author = author; 70 } 71 72 public Date getPublicationDate() { 73 return publicationDate; 74 } 75 76 public void setPublicationDate(Date publicationDate) { 77 this.publicationDate = publicationDate; 78 } 79 80 public int getStock() { 81 return stock; 82 } 83 84 public void setStock(Integer stock) { 85 this.stock = stock; 86 } 87 88 public Genre getGenre() { 89 return genre; 90 } 91 92 public void setGenre(Genre genre) { 93 this.genre = genre; 94 } 95 96 public Genre getCategory() { 97 return genre; 98 } 99 100 public void setCategory(Category cateogry) { 101 this.category = cateogry; 102 } 103}

■ Book :Repository1

Java

1package jp.co.sss.book.repository; 2 3import java.util.List; 4 5import org.springframework.data.jpa.repository.JpaRepository; 6import org.springframework.stereotype.Component; 7 8import jp.co.sss.book.entity.Book; 9import jp.co.sss.book.entity.Genre; 10 11@Component 12public interface BookRepository extends JpaRepository<Book, Integer>{ 13} 14

■ Category :Entity2

Java

1package jp.co.sss.book.entity; 2 3import javax.persistence.Column; 4import javax.persistence.Entity; 5import javax.persistence.GeneratedValue; 6import javax.persistence.Id; 7import javax.persistence.JoinColumn; 8import javax.persistence.OneToMany; 9import javax.persistence.Table; 10 11@Entity 12@Table(name = "category") 13public class Category { 14 15 @Id 16 @GeneratedValue 17 private Long categoryId; 18 19 @Column 20 private String categoryName; 21 22 @OneToMany 23 @JoinColumn(name="category_id",referencedColumnName="category") 24 25 public Long getCategoryId() { 26 return categoryId; 27 } 28 29 public void setCategoryId(Long categoryId) { 30 this.categoryId = categoryId; 31 } 32 33 public String getCategoryName() { 34 return categoryName; 35 } 36 37 public void setCategoryName(String categoryName) { 38 this.categoryName = categoryName; 39 } 40}

■ Category :Repository2

Java

1package jp.co.sss.book.repository; 2 3import org.springframework.data.jpa.repository.JpaRepository; 4import org.springframework.stereotype.Component; 5 6import jp.co.sss.book.entity.Category; 7 8@Component 9public interface CategoryRepository extends JpaRepository<Category, Long>{ 10}

コンソール画面のエラー

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 org.hibernate.MappingException: Unable to find column with logical name: cateogryId in org.hibernate.mapping.Table(category) and its related supertables and secondary tables

  • entityManagerFactoryが作れずにエラーを吐いている
  • categoryIdの論理名が見つからない
  • categoryテーブルと関連するテーブルが見つからない

BookテーブルがcategoryIdを判定できない
ようなことだと、理解力が乏しいながらに思いました。‥が、どの箇所が間違っているのか分りません。

考えられる原因、解決方法の候補がありましたらご教授下さいませ。
どうかよろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

外部参照する時は、参照されるテーブルが先にCREATE TABLEされていなければなりません。

あと、制約名(CONSTRAINT に付く名称)はもう少しわかり易さに気を使っては?
以下を参考に。
FOREIGN KEY 外部キー ON DELETE CASCADE の有無での動作確認

投稿2022/06/07 02:59

Orlofsky

総合スコア16415

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

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

kuro0607

2022/06/07 14:29 編集

ご回答ありがとうございます。 おっしゃる通り、外部参照のテーブルでありながら ALTER TABLE book ADD ( category_id NUMBER(2) NOT NULL REFERENCES category(category_id ); CREATE TABLE categories ( …  ); の順に作成していました。そのため DROP TABLE テーブル名 CASCADE CONSTRAINTS; を発行して、参照されるテーブルからCREATE TABLEをやり直したのですが、コンソール画面のエラーは改善しませんでした。 制約名ですね、注意します。
kuro0607

2022/06/07 14:10

「categoryIdと、それに関連するスーパーテーブルとセカンダリーテーブルの論理名を持つカラムが見つかりません」の意味を想像して、category_idとcategoryIdに問題があると考えました。 実際は、エンティティ Bookにて @JoinColumn(name="category_id",referencedColumnName="categoryId") ‥である箇所を"cateogryId"と記述していました。 ■外部参照するとき、参照されるテーブルの作成順序 ■エンティティのフィールド名のスペルミス 上記を修正しまして、無事に解決しました。 ご教示くださりありがとうございました。
Orlofsky

2022/06/07 19:20 編集

解決できて良かったですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問