MySQLがサポートするSpring Boot/JPAを使用しています。私はすでにDBをプロビジョニングしているので、hibernate.hbm2ddl.auto = validate
を使用する予定です(Hibernateは私のためにDBを作成しようとしません。代わりに、私が提供するものを使用し、コードで定義したエンティティに対して "検証"します)。Spring Boot/Hibernate/JPAでの結合テーブルのテーブル名とフィールド名の指定
私は、このようなBook
やAuthor
としての私のエンティティと複数の多対多の関係、持っている:ここで
// Groovy pseudo code! One book can have multiple authors, and a
// single author can have written many books.
@Entity
class Book {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long id
@Column(name="title")
String title
@ManyToMany
List<Author> authors
}
@Entity
class Author {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
Long id
@Column(name="name")
String name
@ManyToMany
List<Book> books
}
は、これらのクラスは、以下の表で表されます。
[books]
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT # PRIMARY KEY
title VARCHAR(50) NOT NULL
[authors]
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT # PRIMARY KEY
name VARCHAR(100) NOT NULL
[books_x_authors]
books_x_authors_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT # PRIMARY KEY
book_id # FK on books
author_id # FK on authors
books_x_authors
私の多対多または「クロスウォーク」表です。それは、私が本当に好きなDB命名規則だと思います。だから私は自分の慣習に従っているテーブルを期待するのではなく、私のjoin/crosswalkテーブルとしてbooks_x_authors
を使うためにSpring Boot/Hibernateをどのように設定するのですか?あなたが気にしない場合は、1つの迅速なフォローアップの質問 - あなたの多対多の下で
おかげで必要なものすべてに参加するテーブルを指定します! 'Book'クラスで逆を行い、' book_id'を 'joinColumns'として宣言していますが、' authorJid'を 'inverseJoinColumn'として宣言しなければならないと思いますか?あるいは、これらの1つのクラスを1つのクラスに定義するだけですか?もしそうなら、( 'Book'または' Author')でこれらの注釈をどのクラスで定義するかは重要ですか?再度、感謝します! – smeeb
著者がこの関係の所有エンティティであることを知っているなら、必要なのは、あなたのブッククラスに@ManyToMany(mappedBy = "books")を置くことだけです。それ以上のconfgiurationsは必要ありません。答えがあなたの問題を解決した場合、答えとしてそれを受け入れてください:) –