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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

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

Q&A

1回答

1576閲覧

JPAでの関連テーブルに関して

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

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

0グッド

0クリップ

投稿2019/06/14 02:25

編集2019/06/14 02:28

#わからない点
現在、図書館の貸し出し管理システムを開発しようとしているのですが、テーブル設計において以下のようなモノとなり、それに合わせて内部の設計を行いました。

イメージ説明

そして、JPAを用いて貸出の**【ラベル番号】**から本の情報を取得しようとしているのですが、どの様にして値を取得すればよいのかで躓いています。

@ManyToOneや@OneToOneで関連付けれるなどと参考サイトは確認したもののどのように紐づけて良いのかわかりません。

何卒、宜しくお願いいたします。

#主な実行手順

  1. 貸出画面でラベル番号、学籍番号を入力する
  2. 入力したラベル番号から本の情報,学生情報を取得にViewに受け渡す

#開発環境

  • Windows10
  • STS4
  • Maven
  • PostgreSQL

#ソースコード
##貸し出し

java

1//貸出を管理するテーブル 2@Entity 3@Table(name = "borrowing") 4public class BorrowEntity implements Serializable { 5 /** 6 * 7 */ 8 private static final long serialVersionUID = 1L; 9 10 // 貸出ID(主キー) 11 @Id 12 @GeneratedValue(strategy = GenerationType.IDENTITY) 13 @Column(name = "borrowing_id", nullable = false) 14 private int borrowId; 15 16 // 本のラベル(外部キー) 17 @ManyToOne(cascade = CascadeType.ALL) 18 @JoinColumn(name = "label") 19 private BookTypeEntity label; 20 21 // 借りた人の情報(IDを外部キーにする) 22 @ManyToOne(cascade = CascadeType.ALL) 23 @JoinColumn(name = "user_id", nullable = false) 24 private StudentEntity studentId; 25 26 // 貸出日 27 @Column(name = "checkout_date", nullable = false) 28 private Date borrowDate; 29 30 // 返却日 31 @Column(name = "return_date", nullable = true) 32 private Date returnDate; 33 34 // 返却予定日 35 @Column(name = "return_due_date", nullable = false) 36 private Date expectedDate; 37 38 // 延長 39 @Column(name = "extension", nullable = false) 40 private boolean extension; 41 42 public int getBorrowId() { 43 return borrowId; 44 } 45 46 public void setBorrowId(int borrowId) { 47 this.borrowId = borrowId; 48 } 49 50 public BookTypeEntity getLabel() { 51 return label; 52 } 53 54 public void setLabel(BookTypeEntity label) { 55 this.label = label; 56 } 57 58 public StudentEntity getStudentId() { 59 return studentId; 60 } 61 62 public void setStudentId(StudentEntity studentId) { 63 this.studentId = studentId; 64 } 65 66 public Date getBorrowDate() { 67 return borrowDate; 68 } 69 70 public void setBorrowDate(Date borrowDate) { 71 this.borrowDate = borrowDate; 72 } 73 74 public Date getReturnDate() { 75 return returnDate; 76 } 77 78 public void setReturnDate(Date returnDate) { 79 this.returnDate = returnDate; 80 } 81 82 public Date getExpectedDate() { 83 return expectedDate; 84 } 85 86 public void setExpectedDate(Date expectedDate) { 87 this.expectedDate = expectedDate; 88 } 89 90 public boolean isExtension() { 91 return extension; 92 } 93 94 public void setExtension(boolean extension) { 95 this.extension = extension; 96 } 97 98 @Override 99 public String toString() { 100 return "BorrowEntity [borrowId=" + borrowId + ", label=" + label + ", studentId=" + studentId + ", borrowDate=" 101 + borrowDate + ", returnDate=" + returnDate + ", expectedDate=" + expectedDate + ", extension=" 102 + extension + "]"; 103 } 104 105}

##本管理表

java

1@Entity 2@Table(name = "book_type") 3@AssociationOverrides({ @AssociationOverride(name = "book") }) 4public class BookTypeEntity implements Serializable { 5 6 /** 7 * 8 */ 9 private static final long serialVersionUID = 1L; 10 11 // 本のラベル(主キー) 12 @Id 13 @OneToMany(cascade = CascadeType.ALL, mappedBy = "label") 14 private BorrowEntity bookLabel; 15 16 // 本種の情報(IDを外部キーにする) 17 @ManyToOne 18 @JoinColumn(name = "book_id") 19 private BookEntity bookList; 20 21 // 本のラベル(主キー) 22 public BorrowEntity getBookLabel() { 23 return bookLabel; 24 } 25 26 // 本のラベル(主キー) 27 public void setBookLabel(BorrowEntity bookLabel) { 28 this.bookLabel = bookLabel; 29 } 30 31 // 本種ID(外部キー) 32 public BookEntity getBookList() { 33 return bookList; 34 } 35 36 // 本種ID(外部キー) 37 public void setBookList(BookEntity bookList) { 38 this.bookList = bookList; 39 } 40 41 @Override 42 public String toString() { 43 return "BookTypeEntity [bookLabel=" + bookLabel + "]"; 44 } 45 46}

##本の種類

java

1//すべての本を管理するテーブル 2@Entity 3@Table(name = "book_type") 4public class BookEntity implements Serializable { 5 6 /** 7 * 8 */ 9 private static final long serialVersionUID = 1L; 10 11 // 本種ID(主キー) 12 @Id 13 @OneToMany(cascade = CascadeType.ALL, mappedBy = "bookList") 14 @JoinColumn(name = "book_id", nullable = false) 15 private BookTypeEntity bookId; 16 17 // 本のタイトル 18 @Column(name = "title", nullable = false) 19 private String bookTitle; 20 21 // 本の著者名 22 @Column(name = "author", nullable = false) 23 private String bookAuthor; 24 25 // ジャンル名 26 @ManyToOne 27 @JoinColumn(name = "genre_id", nullable = false) 28 private GenreEntity genre; 29 30 // 場所 31 @ManyToOne 32 @JoinColumn(name = "location_id", nullable = false) 33 private LocationEntity location; 34 35 // 本種ID(主キー)- Getter 36 public BookTypeEntity getBookId() { 37 return bookId; 38 } 39 40 // 本種ID(主キー)- Setter 41 public void setBookId(BookTypeEntity bookId) { 42 this.bookId = bookId; 43 } 44 45 // 本のタイトル- Getter 46 public String getBookTitle() { 47 return bookTitle; 48 } 49 50 // 本のタイトル- Setter 51 public void setBookTitle(String bookTitle) { 52 this.bookTitle = bookTitle; 53 } 54 55 // 本の著者名- Getter 56 public String getBookAuthor() { 57 return bookAuthor; 58 } 59 60 // 本の著者名- Setter 61 public void setBookAuthor(String bookAuthor) { 62 this.bookAuthor = bookAuthor; 63 } 64 65 // ジャンル名 - Getter 66 public GenreEntity getGenre() { 67 return genre; 68 } 69 70 // ジャンル名 - Setter 71 public void setGenre(GenreEntity genre) { 72 this.genre = genre; 73 } 74 75 // 場所名 - getter 76 public LocationEntity getLocation() { 77 return location; 78 } 79 80 // 場所名 - Setter 81 public void setLocation(LocationEntity location) { 82 this.location = location; 83 } 84 85 @Override 86 public String toString() { 87 return "BookEntity [bookId=" + bookId + ", bookTitle=" + bookTitle + ", bookAuthor=" + bookAuthor + ", genre=" 88 + genre + ", location=" + location + "]"; 89 } 90 91}

ジャンル

java

1@Entity 2@Table(name = "genre") 3public class GenreEntity implements Serializable { 4 5 /** 6 * 7 */ 8 private static final long serialVersionUID = 1L; 9 10 // ジャンルのID(主キー) 11 @Id 12 @OneToMany(cascade = CascadeType.ALL) 13 @Column(name = "genre_id", nullable = false) 14 15 private int genreId; 16 17 // ジャンル名 18 @Column(name = "genre_name", nullable = false) 19 private String genreName; 20 21 // ジャンルのID(主キー) - Getter 22 public int getGenreId() { 23 return genreId; 24 } 25 26 // ジャンルのID(主キー) - Setter 27 public void setGenreId(int genreId) { 28 this.genreId = genreId; 29 } 30 31 // ジャンル名 - Getter 32 public String getGenreName() { 33 return genreName; 34 } 35 36 // ジャンル名 - Setter 37 public void setGenreName(String genreName) { 38 this.genreName = genreName; 39 } 40 41 @Override 42 public String toString() { 43 return "GenreEntity [genreId=" + genreId + ", genreName=" + genreName + "]"; 44 } 45 46}

##場所

java

1@Entity 2@Table(name = "location") 3public class LocationEntity implements Serializable { 4 5 /** 6 * 7 */ 8 private static final long serialVersionUID = 1L; 9 10 // 場所ID 11 @Id 12 @OneToMany(cascade = CascadeType.ALL) 13 @Column(name = "location_id", nullable = false) 14 private int locationId; 15 16 // 場所名 17 @Column(name = "location_name", nullable = false) 18 private String locationName; 19 20 21 22 public int getLocationId() { 23 return locationId; 24 } 25 26 27 28 public void setLocationId(int locationId) { 29 this.locationId = locationId; 30 } 31 32 33 34 public String getLocationName() { 35 return locationName; 36 } 37 38 39 40 public void setLocationName(String locationName) { 41 this.locationName = locationName; 42 } 43 44 45 46 @Override 47 public String toString() { 48 return "LocationEntity [locationId=" + locationId + ", locationName=" + locationName + "]"; 49 } 50 51}

学生

java

1@Entity 2@Table(name = "student") 3public class StudentEntity implements Serializable { 4 /** 5 * 6 */ 7 private static final long serialVersionUID = 1L; 8 9 // 主キーの学籍番号 10 @Id 11 @OneToMany(cascade = CascadeType.ALL) 12 @Column(name = "student_id", length = 8, nullable = false) 13 private String studentId; 14 15 // 学生の名前 16 @Column(name = "student_name", nullable = false) 17 private String studentName; 18 19 public String getStudentId() { 20 return studentId; 21 } 22 23 public void setStudentId(String studentId) { 24 this.studentId = studentId; 25 } 26 27 public String getStudentName() { 28 return studentName; 29 } 30 31 public void setStudentName(String studentName) { 32 this.studentName = studentName; 33 } 34 35}

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

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

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

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

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

Orlofsky

2019/06/14 09:21 編集

SQLはデータベースによってかなり方言があります。[PostgreSQL]タグを追加すると以下のURLにも載りますからちょっとコメントが付きやすくなるかも? https://teratail.com/tags/PostgreSQL
退会済みユーザー

退会済みユーザー

2019/06/16 03:18

Orlofsky JPA って基本SQLを書かないからそれとは違うかと 特にJOINはアノテーションのみ
guest

回答1

0

アノテーションの設定の理解がいまいちわからないということであれば

データベースを作成してから JBoss Tools 内のHibernate Toolsを使ってJPAのEntityクラスを生成する

などプラグイン等を用いて作成してはいかがですか?

投稿2019/06/16 04:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問