2017-04-06 8 views
0

MySQLがサポートするSpring Boot/JPAを使用しています。私はすでにDBをプロビジョニングしているので、hibernate.hbm2ddl.auto = validateを使用する予定です(Hibernateは私のためにDBを作成しようとしません。代わりに、私が提供するものを使用し、コードで定義したエンティティに対して "検証"します)。Spring Boot/Hibernate/JPAでの結合テーブルのテーブル名とフィールド名の指定

私は、このようなBookAuthorとしての私のエンティティと複数の多対多の関係、持っている:ここで

// 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つの迅速なフォローアップの質問 - あなたの多対多の下で

答えて

3

あなたはQarabasa(1)@Amer

@ManyToMany 
@JoinTable(name="books_x_authors", 
joinColumns={@JoinColumn(name="author_id"}, inverseJoinColumns={@JoinColumn(name="book_id")}) 
List<Book> books 
+0

おかげで必要なものすべてに参加するテーブルを指定します! 'Book'クラスで逆を行い、' book_id'を 'joinColumns'として宣言していますが、' authorJid'を 'inverseJoinColumn'として宣言しなければならないと思いますか?あるいは、これらの1つのクラスを1つのクラスに定義するだけですか?もしそうなら、( 'Book'または' Author')でこれらの注釈をどのクラスで定義するかは重要ですか?再度、感謝します! – smeeb

+1

著者がこの関係の所有エンティティであることを知っているなら、必要なのは、あなたのブッククラスに@ManyToMany(mappedBy = "books")を置くことだけです。それ以上のconfgiurationsは必要ありません。答えがあなたの問題を解決した場合、答えとしてそれを受け入れてください:) –

関連する問題