私は単純な多対多テーブルを持っています。 1つの用語は複数のカテゴリに属し、1つのカテゴリは複数の用語に割り当てられます。なぜHibernateは多対多関係テーブルの主キーを生成しませんか?
Term.java
@Entity
public class Term implements Serializable {
@Id
@GeneratedValue
private long id;
@NotNull
@Size(min = 1, max = 100)
private String name;
@ManyToMany(mappedBy="terms")
private List<Category> categories = new ArrayList<Category>();
...
// getters and setters
}
Category.java
@Entity
public class Category implements Serializable {
@Id
@GeneratedValue
private long id;
@NotNull
@Size(min = 1, max = 255)
private String name;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private List<Term> terms = new ArrayList<>();
// getters and setters
}
しかし、生成された交差点のテーブルには、 "" ここから分かるように、主キー、含まれていません。
MariaDB [wordDS]>describe Category_Term;
+---------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------+------+-----+---------+-------+
| categories_id | bigint(20) | NO | MUL | NULL | |
| terms_id | bigint(20) | NO | MUL | NULL | |
+---------------+------------+------+-----+---------+-------+
を
コンポジットキーは常にプライマリキーとして必要なのではなく、Hibernateによって自動的に作成されるはずですか?どうすれば自動的に作成できますか?
なぜ結合テーブルにキーが必要なのですか? – chrylis
キーがないと、テーブルに重複が許可されます。通常は避ける必要があります。 – user697911