エンティティとJPAを使用してツリーを作成しようとしています。次のプロパティを持つクラスがあります。
public class Dir
{
@Id
@Basic(optional = false)
@NotNull
@Column(name = "dirId")
private Integer dirId;
@OneToOne(mappedBy="dirId", cascade= CascadeType.ALL)
private Dir parent;
...
ノードはその親が誰であるかを知っており、親がない場合はルートです。これで簡単にツリーを構築できます。しかし...私はマッピングがこの考えに正しいとは思いません。デプロイしようとすると、次のエラーが発生します。
An incompatible mapping has been encountered between [class com.dv.oa.model.entity.dir.Dir] and [class com.dv.oa.model.entity.dir.Dir]. This usually occurs when the cardinality of a mapping does not correspond with the cardinality of its backpointer.
カーディナリティについて話します。しかし、これは意味がありません。ノードは1つの親しか持つことができません。これが私が選んだ理由です@OneToOne
誰かがこれに光を当てることができますか?これを尋ねる別の方法は、エンティティをそれ自体の別のインスタンスにどのようにマップするかということだと思います。
編集
これが私のテーブル構造です:
mysql> describe dir;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| dirId | int(11) | NO | PRI | NULL | |
| DTYPE | varchar(31) | YES | | NULL | |
| dirName | varchar(255) | YES | | NULL | |
| companyOwner | int(11) | YES | MUL | NULL | |
| userOwner | int(11) | YES | MUL | NULL | |
| parent | int(11) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)