3

... トランザクションに関する情報を含むトランザクション テーブルがあります。一部のトランザクションは以前のトランザクションから派生しているため、トランザクション間に 1 対 1 の関係が存在する可能性があります。

このデータ構造を作成するために休止状態で注釈を設定しようとしていますが、その方法を理解または見つけることができませんでした。

@Entity
@Table(name="transaction")
public class Transaction {
private String transactionid;
private Transaction derivedFrom;

   /**
     * @return the transactionid
     */
    @Id
    public String getTransactionid() {
        return transactionid;
    }
    /**
     * @param transactionid the transactionid to set
     */
    public void setTransactionid(String transactionid) {
        this.transactionid = transactionid;
    }

    @OneToOne(mappedBy = "transaction", cascade = CascadeType.ALL)
    public Transaction getDerivedFrom() {
        return derivedFrom;
    }
    public void setDerivedFrom(Transaction derivedFrom) {
        this.derivedFrom = derivedFrom;
    }

}

ここにコードの例を示しますので、これでどこに行くのか理解できます...この関係を設定する方法について何かアイデアはありますか?

4

2 に答える 2

4

動作しません。

mappedBy="transaction" 

双方向の関係と、関係の反対側での属性名トランザクションを呼び出します。コードからわかるように、そのような属性はありません。

子から親への一方向の 1 対 1が必要な場合は、次のようにします。

public class Transaction {
    private String transactionid;
    private Transaction parent;

    @Id
    public String getTransactionid() {
        return transactionid;
    }
    public void setTransactionid(String transactionid) {
        this.transactionid = transactionid;
    }
    @OneToOne
    public Transaction getParent() {
        return parent;
    }
    public void setParent(Transaction parent) {
        this.parent = parent;
    }
}

関係はデフォルトで列名に保持されますがparent_transactionid、これはもちろん@JoinColumで変更できます。さらに、列に一意の制約を設定する可能性があります。

上記の双方向の 1 対 1 の関係を作成するには、以下を追加するだけです (他の変更は必要ありません)。

private Transaction child;

@OneToOne(mappedBy = "parent")
public Transaction getChild() {
    return parent;
}
public void setChild(Transaction child) {
    this.child = child;
}
于 2012-07-16T15:09:40.617 に答える
1

トランザクション テーブルに外部キー列 "derived_id" があると仮定すると、結合列を指定できます。

 @Entity
 public class Transaction 
 {
    @OneToOne
    @JoinColumn(name = "derived_id", nullable = true)
    private Transaction derivedFrom;
 }
于 2012-07-16T14:54:56.790 に答える