1

私はJPAを初めて使用し、いくつかのエンティティを作成するのに苦労しています。

私が構築しているアプリケーションでは、データベースで定義されたエリアとサブエリアに従っていくつかのエンティティを分類することができます。

関連するテーブルは次の 4 つです。

1) 分類

+-------------+-----------------------+------+-----+---------+----------------+
| Field       | Type                  | Null | Key | Default | Extra          |
+-------------+-----------------------+------+-----+---------+----------------+
| ID          | int(11) unsigned      | NO   | PRI | NULL    | auto_increment |
| pID         | int(11) unsigned      | NO   | MUL | NULL    |                |
| reference   | varchar(300)          | NO   |     | NULL    |                |
| link        | varchar(255)          | YES  |     | NULL    |                |
+-------------+-----------------------+------+-----+---------+----------------+

2) cls_area_map

+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| class   | int(11) unsigned | NO   | MUL | NULL    |                |
| idarea  | int(11) unsigned | NO   | MUL | NULL    |                |
| subarea | int(11) unsigned | YES  | MUL | NULL    |                |
| id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
+---------+------------------+------+-----+---------+----------------+

3) 面積

+--------+------------------+------+-----+---------+----------------+
| Field  | Type             | Null | Key | Default | Extra          |
+--------+------------------+------+-----+---------+----------------+
| idarea | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| label  | varchar(255)     | NO   | UNI | NULL    |                |
+--------+------------------+------+-----+---------+----------------+

4) サブエリア

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| area_idarea | int(11) unsigned | NO   | MUL | NULL    |                |
| label       | varchar(255)     | NO   | UNI | NULL    |                |
| ID          | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
+-------------+------------------+------+-----+---------+----------------+

classification一般的な分類情報を保存しcls_area_map、 に一般的な情報を分類の領域 ( と で定義) に関連付けようとしareaますsubarea

分類エリア マッピング情報を自分Classificationと自分のCls_area_mapエンティティ クラスに追加しようとすると、問題が発生します。

エラーが発生します:

An incompatible mapping has been encountered between [class Entity.Classification] and [class Entity.Cls_area_map]. This usually occurs when the cardinality of a mapping does not correspond with the cardinality of its backpointer..

カーディナリティについて何が間違っているのかわかりません。これはClassification、関係を作成するために追加したものです。

@OneToMany(mappedBy = "id")
private List<Cls_area_map> cls_area;

とでCls_area_map

@JoinColumn(name = "class",referencedColumnName = "ID")
@ManyToOne(optional=false)
private Classification classy;

説明/ヒントはありますか?

(そして とはどういう意味backpointerですか?)

4

1 に答える 1

2

mappedByこちら側のエンティティが関係の逆であることを示します。そのため、外部キーの代わりにエンティティ名を使用する必要があります。

ドクター曰く

mappingBy は、所有者側の関連付けのプロパティ名を参照します。

あなたの場合は上品なので、使用してください

@OneToMany(mappedBy = "classy")
private List<Cls_area_map> cls_area;

以下も参照してください。

マッピングされた作成者

于 2014-02-04T09:19:38.623 に答える