2012-07-16 71 views
3

一個關係我有一個包含關於...的交易信息的事務表,有些交易是從以前的交易得到的,這樣可以有一個交易之間的一個關係。Hibernate的一個相同的對象

我試圖建立標註在Hibernate來創建這個數據結構,但我無法找出或發現如何做到這一點。

@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; 
    } 

} 

下面是代碼的例子,所以你會明白的地方,我有這個打算......關於如何建立這種關係的任何想法?

回答

3

它不工作,因爲

mappedBy="transaction" 

呼籲雙向關係和關係另一方的屬性名稱事務。正如你從你的代碼中看到的,你沒有這樣的屬性。

如果你想單向一到一個從孩子到家長,以下是路要走:

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。另外,您可能希望爲列設置獨特的限制。

爲了使上述雙向one-to-一項所述關係,只需添加以下(無需其它修改):

private Transaction child; 

@OneToOne(mappedBy = "parent") 
public Transaction getChild() { 
    return parent; 
} 
public void setChild(Transaction child) { 
    this.child = child; 
} 
0

假設你已經在你的交易表的外鍵列「derived_id」,您可以指定連接列

@Entity 
public class Transaction 
{ 
    @OneToOne 
    @JoinColumn(name = "derived_id", nullable = true) 
    private Transaction derivedFrom; 
} 
相關問題